Bepalen wanneer een ViewPager van pagina verandert

Ik heb drie pagina’s (fragmenten) in een ViewPager, maar ik wil slechts een menu-item voor twee van die pagina’s weergeven.

De code gegeven in een vorige SO-antwoordlijkt niet te werken:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser == true) { }
    else if (isVisibleToUser == false) {  }
}

Eclipse zegt dat @Override niet nodig is en dat super niet kan worden ingesteld. Het wordt nooit aangeroepen door het systeem, en zelfs als dat zo was, hoe zou ik dan bepalen welke pagina op dat moment werd getoond? Kan ik hier wat hulp hebben?


Antwoord 1, autoriteit 100%

Gebruik de ViewPager.OnPageChangeListener:

viewPager.addOnPageChangeListener(new OnPageChangeListener() {
    public void onPageScrollStateChanged(int state) {}
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
    public void onPageSelected(int position) {
        // Check if this is the page you want.
    }
});

Antwoord 2, autoriteit 40%

ViewPager.setOnPageChangeListeneris nu verouderd. U moet nu in plaats daarvan ViewPager.addOnPageChangeListenergebruiken.

bijvoorbeeld

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) {
        }
    });

Antwoord 3, autoriteit 12%

U kunt ook ViewPager.SimpleOnPageChangeListenergebruiken in plaats van ViewPager.OnPageChangeListeneren alleen de methoden negeren die u wilt gebruiken.

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
    // optional 
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
    // optional 
    @Override
    public void onPageSelected(int position) { }
    // optional 
    @Override
    public void onPageScrollStateChanged(int state) { }
});

Ik hoop dat dit helpt 🙂

Bewerken:
Volgens Android-API’s is setOnPageChangeListener (ViewPager.OnPageChangeListener listener)verouderd. Controleer deze url: – Android ViewPager-API


Antwoord 4, autoriteit 11%

Voor ViewPager2,

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
  override fun onPageSelected(position: Int) {
    super.onPageSelected(position)
  }
})

waar OnPageChangeCallbackeen statische klasse is met drie methoden:

onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels),
onPageSelected(int position), 
onPageScrollStateChanged(@ScrollState int state)

Antwoord 5, autoriteit 10%

Kotlin-gebruikers,

viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
            override fun onPageScrollStateChanged(state: Int) {
            }
            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            }
            override fun onPageSelected(position: Int) {
            }
        })

Update 2020 voor ViewPager2

       viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
        override fun onPageScrollStateChanged(state: Int) {
            println(state)
        }
        override fun onPageScrolled(
            position: Int,
            positionOffset: Float,
            positionOffsetPixels: Int
        ) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            println(position)
        }
        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            println(position)
        }
    })

Other episodes