shaikhmanzoor
shaikhmanzoor

Reputation: 89

Fragment not getting refresh on swipe

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.

Here is my code

slideadapter=new ScreenSlidePagerAdapter(this.getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.viewpager);
    mViewPager.setOffscreenPageLimit(1);

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

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

        @Override
        public void onPageScrollStateChanged(int i) {
            //Not used
            Log.v("TAG","onPageScrollStateChanged");
        }
    });
    mSlidingTabLayout = (SlidingTabLayout)findViewById(R.id.sliding_tabs);
    mViewPager.setAdapter(slideadapter);

    mViewPager.setCurrentItem(0);

    mSlidingTabLayout.setViewPager(mViewPager);

Upvotes: 0

Views: 364

Answers (4)

rKrishna
rKrishna

Reputation: 1399

Create a BaseFragment class with a method ex. loadData (),where Viewpager child fragments extends from this BaseFragment and override the loadData () method and do the operation.

viewPager.setOnPageChangeListener(new OnPageChangeListener() {
 public void onPageScrollStateChanged(int state) {}
 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

 public void onPageSelected(int position) {
    if (slideadapter.getFragment(position) instanceof BaseFragment) {
        ((BaseFragment) slideadapter.getFragment (position)).loadData ();
    }
 }
});

In the SlideAdapter create method called

public Fragment getFragment(int key) {
        return mPageReferences.get(key);
    }
private final SparseArray<Fragment> mPageReferences = new SparseArray<Fragment>();

//add created fragment refernce to this array

  @Override
        public Fragment getItem(int position) {
        mPageReferences.put(position, fragment);
    }

//remove the reference when destroy

@Override
    public void destroyItem(ViewGroup container, int position, Object object) {

        mPageReferences.remove(position);
}

Hope this will help!

Upvotes: 0

harshitpthk
harshitpthk

Reputation: 4136

you can try mViewPager.setOffscreenPageLimit(1); if you want to call the onresume method everytime the fragments becomes visible

Upvotes: 0

rainash
rainash

Reputation: 874

you can override setUserVisibleHint method in your Fragments

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            doSomething();
        }
    }

Upvotes: 1

Nooruddin Lakhani
Nooruddin Lakhani

Reputation: 6967

Use the ViewPager.onPageChangeListener:

viewPager.setOnPageChangeListener(new OnPageChangeListener() {
 public void onPageScrollStateChanged(int state) {}
 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

 public void onPageSelected(int position) {
    // get fragment by position and do whatever you want to do on fragment selection.
 }
});

Upvotes: 0

Related Questions