271

Today I'm trying to set ViewPager.setOnPageChangeListener and I've found out that it's deprecated.

Suragch
  • 484,302
  • 314
  • 1,365
  • 1,393
Jaydipsinh Zala
  • 16,558
  • 7
  • 41
  • 45
  • 15
    btw, *This method is deprecated. Use addOnPageChangeListener(OnPageChangeListener) and removeOnPageChangeListener(OnPageChangeListener) instead.*, is from the documentation – Blackbelt Jun 16 '15 at 12:45

7 Answers7

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
  • 2
    It 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
  • 8
    I 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
  • 2
    That'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
39

Use ViewPager.addOnPageChangeListener instead of ViewPager.setOnPageChangeListener.

AeH
  • 549
  • 5
  • 4
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
0
  1. Create an interface if need be;

    public interface FragmentLifecycle {
    public void onPauseFragment();
    public void onResumeFragment();
    

    }

  2. 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();
    }
  1. 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) {
    
        }
    });
    
  2. 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