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.setOnPageChangeListener
is nu verouderd. U moet nu in plaats daarvan ViewPager.addOnPageChangeListener
gebruiken.
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.SimpleOnPageChangeListener
gebruiken in plaats van ViewPager.OnPageChangeListener
en 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 OnPageChangeCallback
een 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)
}
})