Today I'm trying to set ViewPager.setOnPageChangeListener
and I've found out that it's deprecated.
Asked
Active
Viewed 9.2k times
271

Suragch
- 484,302
- 314
- 1,365
- 1,393

Jaydipsinh Zala
- 16,558
- 7
- 41
- 45
-
15btw, *This method is deprecated. Use addOnPageChangeListener(OnPageChangeListener) and removeOnPageChangeListener(OnPageChangeListener) instead.*, is from the documentation – Blackbelt Jun 16 '15 at 12:45
7 Answers
609
ViewPager.setOnPageChangeListener
is deprecated now. Need to use ViewPager.addOnPageChangeListener
instead.
for example,
ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
You can find this Here.

Jaydipsinh Zala
- 16,558
- 7
- 41
- 45
-
2It seems Eclipse couldn't even find the method addOnPageChangeListener, may I ask what support library is this from? – Neon Warge Sep 06 '15 at 05:13
-
8I think a mention of clearOnPageChangeListeners() is worthy here, so one doesn't end up with multiple listeners when using addOnPageChangeListener(). – clocksmith Oct 25 '15 at 21:53
-
2That's confusing. It would be nice if they kept with the same syntax and simply replaced this call or something with the updated version. – Jay Snayder Feb 12 '16 at 18:46
41
this worked for me:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
conterchange.setText(""+(1+position));
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});

Jerzyk
- 3,662
- 23
- 40

kinsley kajiva
- 1,840
- 1
- 21
- 26
11
Just in case someone needs the solution in kotlin:
viewPager.addOnPageChangeListener (object: ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onPageSelected(position: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})

Noelia
- 3,698
- 4
- 17
- 22
8
You can achieve via SimpleOnPageChangeListener
Below is the Code:
private Fragment page = null;
/** Defining a listener for pageChange */
ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager_selectPhotos + ":" + position);
System.out.println(page);
switch (position) {
case 0:
break;
case 1:
break;
default:
break;
}
}
};
/** Setting the pageChange listener to the viewPager */
_pager.setOnPageChangeListener(pageChangeListener);

Shoeb Siddique
- 2,805
- 1
- 22
- 42
-
Question was an alternative for the *deprecated* setOnPageChangeListener function. – Elementary Jan 12 '18 at 12:27
0
Create an interface if need be;
public interface FragmentLifecycle { public void onPauseFragment(); public void onResumeFragment();
}
Implement Interface in every fragment in viewpager as shown
public class FragmentCast extends Fragment implements FragmentLifecycle { @Override public void onPauseFragment() { Log.i(TAG, "onPauseFragment()"); Toast.makeText(getActivity(), "onPauseFragment():" + TAG, Toast.LENGTH_SHORT).show(); } @Override public void onResumeFragment() { Log.i(TAG, "onResumeFragment()"); Toast.makeText(getActivity(), "onResumeFragment():" + TAG, Toast.LENGTH_SHORT).show(); }
List this is how u user the addOnPageListener
enter viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { int currentPosition = 0;
@Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { FragmentLifecycle fragmentLifecycleToShow =(FragmentLifecycle) viewPager.getAdapter().instantiateItem(viewPager, viewPager.getCurrentItem()); fragmentLifecycleToShow.onResumeFragment(); FragmentLifecycle fragmentLifecycleToHide =(FragmentLifecycle) viewPager.getAdapter().instantiateItem(viewPager, currentPosition); fragmentLifecycleToHide.onPauseFragment(); currentPosition = position; } @Override public void onPageScrollStateChanged(int state) { } });
Implement your calls in the onPauseFragment() or onResumeFragment()

Goodlife
- 3,822
- 2
- 24
- 23
0
This is the new method for navbar with viewpager It Worked for me.
binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
switch (position) {
case 0:
binding.bottomNavigation.getMenu().findItem(R.id.nav_item_Home).setChecked(true);
break;
case 1:
binding.bottomNavigation.getMenu().findItem(R.id.nav_item_Booking).setChecked(true);
break;
case 2:
binding.bottomNavigation.getMenu().findItem(R.id.nav_item_Transaction).setChecked(true);
break;
case 3:
binding.bottomNavigation.getMenu().findItem(R.id.nav_item_HealthyFood).setChecked(true);
break;
}
}
});

Rumit Patel
- 8,830
- 18
- 51
- 70

Akshay Karande
- 31
- 4