私はkotlinの初心者です。どのようにしてOnPageChangeListener
にViewPager
を追加できますか。
viewPager?.addOnPageChangeListener // Now how can I add listener to it.
それは非常にシンプルであることがわかりましたが、kotlinが初めてなので、時間がかかりました。いつか他の人の時間を節約できることを願っています。
_viewPager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
}
})
_
または、Activity
またはFragment
に_ViewPager.OnPageChangeListener
_を実装してから、単にviewPager?.addOnPageChangeListener(this)
を使用できますが、オーバーライドされたメソッドを実装するようにしてください。
Kotlinの機能をさらに一歩進めたい場合は、3つのメソッドのそれぞれに独自のカスタムリスナーを作成することで、_ViewPager.OnPageChangeListener
_の使用を簡素化できます。各リスナーは、OnPageChangedListener: onPageScrolled(), onPageSelected() and onPageScrollStateChanged()
で定義されたアクションの1つを処理します。通常、いずれかのメソッドをオーバーライドするだけであるため、他の2つのメソッドを気にせずに、目的の処理を実行する実装をすばやく追加できます。これは、バターナイフが注釈_@OnPageSelected
_などで達成したことと似ています。
これを行うには、使用するクラスを作成します。
_// ViewPagerOnPageSelected.kt
class ViewPagerOnPageSelected(private val pageSelected: (Int) -> Unit = {}) : ViewPager.OnPageChangeListener {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
pageSelected(position)
}
override fun onPageScrollStateChanged(state: Int) {}
}
// ViewPagerOnPageScrolled.kt
class ViewPagerOnPageScrolled(private val pageScrolled: (Int, Float, Int) -> Unit = { _, _, _ -> }) : ViewPager.OnPageChangeListener {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
pageScrolled(position, positionOffset, positionOffsetPixels)
}
override fun onPageSelected(position: Int) {}
override fun onPageScrollStateChanged(state: Int) {}
}
// ViewPagerScrollStateChanged.kt
class ViewPagerScrollStateChanged(private val pageScrollStateChanged: (Int) -> Unit = {}) : ViewPager.OnPageChangeListener {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {}
override fun onPageScrollStateChanged(state: Int) {
pageScrollStateChanged(state)
}
}
_
クラスを作成したら(または正直に言うと、最も使用されるのはonPageSelected()
なので、作成するだけです)、アクティビティに実装できます。
_// MyActivity.kt
viewPager.addOnPageChangeListener(ViewPagerOnPageSelected(this@MyActivity::onPageSelected))
private fun onPageSelected(position: Int) {
// add your code here
}
_
2番目または3番目のリスナーを追加することもできます
_// MyActivity.kt
viewPager.addOnPageChangeListener(ViewPagerOnPageSelected(this@MyActivity::onPageSelected))
viewPager.addOnPageChangeListener(ViewPagerScrollStateChanged(this@MyActivity::onPageScrollStateChanged))
private fun onPageSelected(position: Int) {
// add your code here
}
private fun onPageScrollStateChanged(state: Int) {
// add your code here
}
_
Kotlinはこれに最適ですが、ViewPagerリスナーだけでなく、オーバーライドする必要がある場合でも複数のメソッドをオーバーライドする必要があるAndroidインターフェイスに適用されます。
注:最初の起動時にリスナーのonPageSelected()が呼び出されないことを忘れないでください。したがって、最初のページでアクションを実行する場合は、このリスナーメソッドの外で実行する必要があります。
がんばろう!!!