0

I have implemented in my application tab swiping with ViewPager, Fragments etc. Everything is working fine. But I would like to know which function is run after swiping to next tab? Because I need to refresh some data when user will swipe to next screen.

I have this functions in my activity:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootview = inflater.inflate(R.layout.activity_main_sensors_p, container, false);
    return rootview;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    update_data();
    display_items();
}
voximdo
  • 53
  • 2
  • 14
  • have you try onResume or onStart ? – Arfan Mirza Oct 18 '16 at 20:39
  • BTW it is better if you track visibility of fragment because viewPager always hold next fragment.. or set offScreen in revision 4, you can force viewPager to create fragment every time .. by this method mViewPager.setOffscreenPageLimit(2); – Arfan Mirza Oct 18 '16 at 20:42
  • `Fragment#getUserVisibleHint()` tells you whether a fragment is currently selected in view pager. – Eugen Pechanec Oct 18 '16 at 20:54
  • I tried onResume and onStart as you suggested by still no effect. And I have noticed like you said - viewPager is holding always holding next fragment. Because if I swipe to third tab its updated. Second approach is also have the same issue unfortunately :( – voximdo Oct 18 '16 at 20:56
  • Full solution here: http://stackoverflow.com/questions/36503779/refresh-data-in-viewpager-fragment – Daniel Nugent Oct 19 '16 at 19:19

2 Answers2

0
YourFragment extends Fragment {

  @Override
  public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (this.isVisible()) {
      ....
    } else {
      ....
    }
  }
}
merovingen
  • 423
  • 3
  • 7
0

You can try set OnPageChangeListener listener to your ViewPager and do action accrding to the current position in pager adapter:

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
        // do action accroding to the viewPager position
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});
wichnator
  • 71
  • 2