Edited at

【Android】ViewPagerのOnPageChangeListenerにはSimpleOnPageChangeListenerを使おう【Kotlin】

More than 1 year has passed since last update.

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
}
}

せっかく用意してくれているので活用していけると良いですね。

また、こういうのはだいたいソースコードにコメントが書いてあるので他のも読んでみると良さそうです。