我是kotlin的新手,如何在OnPageChangeListener
中添加ViewPager
。
viewPager?.addOnPageChangeListener // Now how can I add listener to it.
发布于 2018-02-24 08:27:11
如果您想进一步利用Kotlin的功能,可以通过为这三种方法中的每一种创建您自己的自定义侦听器来简化ViewPager.OnPageChangeListener
的使用。每个侦听器处理OnPageChangedListener: onPageScrolled(), onPageSelected() and onPageScrollStateChanged()
中定义的一个操作。通常,您只是覆盖其中一个方法,这样您就可以快速地添加一个实现来完成您想要做的事情,而不必担心其他两个方法。这与蝴蝶刀在批注、@OnPageSelected
等方面所做的类似。
为此,创建要使用的类(Es):
// 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
}
您甚至可以添加第二个或第三个侦听器。
// 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()在初始启动时不会被调用,所以如果您想在第一页上采取行动,就需要在此侦听器方法之外执行它。
祝好运!
https://stackoverflow.com/questions/45513455
复制相似问题