keysersoze
keysersoze

Reputation: 2572

ViewPager - Refresh fragments view on swipe

Hi I want to update the view of viewpager's fragment on swipe (something similar to setOffscreenPageLimit = 0 which doesnt work because minimum offset is 1) but I dont know how. I tried with interface but i get nullpointer exception on parts of my view which visibility I try to set:

pager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            ((OnRefreshListener) adapter.getItem(position)).onRefresh();
        }
        @Override
        public void onPageScrollStateChanged(int arg0) {}

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {}
    });

Implemented interface:

@Override
public void onRefresh() {
    if(AddLesson.addNext) {
        addDetails.setVisibility(View.GONE);
        addLesson.setVisibility(View.GONE);
        addWithData.setVisibility(View.VISIBLE);
        addWithoutData.setVisibility(View.VISIBLE);
    }
}

FragmentStatePagerAdapter:

class TabsAdapter extends FragmentStatePagerAdapter {
    public TabsAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        AddLessonDetails addDetails = AddLessonDetails.newInstance(CONTENT[position]);
        return addDetails;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return CONTENT[position % CONTENT.length];
    }

    @Override
    public int getCount() {
        return CONTENT.length;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

What can I do to solve that problem?

Upvotes: 0

Views: 5453

Answers (2)

Dinesh IT
Dinesh IT

Reputation: 87

This will affect the changes from one page to another page in view pager.

OnPageChangeListener pagechangelistener =new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            Logger.logMessage("Called first");

            pageAdapter.notifyDataSetChanged();
            indicator.setCurrentItem(arg0);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

            Logger.logMessage("Called second");

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {

            Logger.logMessage("Called third");

        }
    };
    myViewPager.setOnPageChangeListener(pagechangelistener);

Use this in your page adapter.

@Override public int getItemPosition(Object object) {

    return POSITION_NONE;
}

Upvotes: 0

Kuffs
Kuffs

Reputation: 35651

You are calling getItem on your adapter which is returning (I assume) a brand new fragment.

Because you are returning an uninitialised fragment and then immediately calling its OnRefresh method which is attempting to manipulate views that have not been created, you get a NPE.

Do not attempt to access views in a fragment until AFTER OnCreateView is called.

Upvotes: 1

Related Questions