LoginSignup
9
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-27

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

せっかく用意してくれているので活用していけると良いですね。
また、こういうのはだいたいソースコードにコメントが書いてあるので他のも読んでみると良さそうです。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6