ViewPagerに OnPageChangeListener
を追加し onPageSelected
のみに処理をしたい場合に、以下のような実装を見ることがあります。
viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(int position) {
action(position)
}
}
実装としては間違っていないのですが、一見 onPageSelected
以外のメソッドはあえてオーバーライドして処理を消しているのかなって気がするし、何かしらの意図があるようにも感じます。もし、何も意味がないのであればよりシンプルな書き方をするほうが良さそうです。
そこで使うのが ViewPager.SimpleOnPageChangeListener
です。ViewPager.SimpleOnPageChangeListener
を使った場合は、以下のように必要なメソッドのみをオーバーライドしてあげれば良いので可読性があがります。
viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
action(position)
}
})
ちなみに ViewPager.SimpleOnPageChangeListener
の中身はこのようになっています。
/**
* Simple implementation of the {@link OnPageChangeListener} interface with stub
* implementations of each method. Extend this if you do not intend to override
* every method of {@link OnPageChangeListener}.
*/
public static class SimpleOnPageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// This space for rent
}
@Override
public void onPageSelected(int position) {
// This space for rent
}
@Override
public void onPageScrollStateChanged(int state) {
// This space for rent
}
}
せっかく用意してくれているので活用していけると良いですね。
また、こういうのはだいたいソースコードにコメントが書いてあるので他のも読んでみると良さそうです。