James
James

Reputation: 3565

Refresh Fragment in ViewPager using FragmentStatePagerAdapter

I am using a viewPager for its swipe abilities to swipe between two Fragments. However I want to refresh the Fragment contents on swipe. The FragmentStatePagerAdapter does a very good job of caching so its hard to get the Fragment to reload. I've tried putting everything in the onResume method but that has no effect.

My Adapter is pretty simple:

public class AdapterHomePre extends FragmentStatePagerAdapter {

    ArrayList<Fragment> mFrags = new ArrayList<Fragment>();

    public AdapterHomePre(FragmentManager fm) {
        super(fm);

        mFrags.add(new FragmentOne());
        mFrags.add(new FragmentTwo());
    }

    @Override
    public int getCount() {
        return mFrags.size();
    }

    @Override
    public Fragment getItem(int position) {
        return mFrags.get(position);
    }
}

I've tried all sorts of things as suggested on stack overflow, including as suggested this:

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

Which makes no difference.

I don't really want to destroy the fragment each time, but I've not even been able to get that working.

Upvotes: 3

Views: 2754

Answers (2)

Bourdier Jonathan
Bourdier Jonathan

Reputation: 600

try

mViewPager.setOffscreenPageLimit(1);

Upvotes: -1

James
James

Reputation: 3565

What I ended up doing was editing the Fragment that sets up the viewPager so it forces the child Fragment to reload:

    mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {
            //Not used
        }

        @Override
        public void onPageSelected(int position) {
            //Force the fragment to reload its data
            Fragment f = mAdapter.getItem(position);
            f.onResume();
        }

        @Override
        public void onPageScrollStateChanged(int i) {
            //Not used
        }
    });

Upvotes: 2

Related Questions