首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kotlin -如何在OnPageChangeListener中添加ViewPager

Kotlin -如何在OnPageChangeListener中添加ViewPager
EN

Stack Overflow用户
提问于 2017-08-04 18:34:46
回答 4查看 27.4K关注 0票数 46

我是kotlin的新手,如何在OnPageChangeListener中添加ViewPager

代码语言:javascript
运行
复制
viewPager?.addOnPageChangeListener // Now how can I add listener to it.
EN

Stack Overflow用户

发布于 2018-02-24 08:27:11

如果您想进一步利用Kotlin的功能,可以通过为这三种方法中的每一种创建您自己的自定义侦听器来简化ViewPager.OnPageChangeListener的使用。每个侦听器处理OnPageChangedListener: onPageScrolled(), onPageSelected() and onPageScrollStateChanged()中定义的一个操作。通常,您只是覆盖其中一个方法,这样您就可以快速地添加一个实现来完成您想要做的事情,而不必担心其他两个方法。这与蝴蝶刀在批注、@OnPageSelected等方面所做的类似。

为此,创建要使用的类(Es):

代码语言:javascript
运行
复制
// 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(),所以您只需创建该类),就可以在您的活动中实现它们。

代码语言:javascript
运行
复制
// MyActivity.kt 
viewPager.addOnPageChangeListener(ViewPagerOnPageSelected(this@MyActivity::onPageSelected))

private fun onPageSelected(position: Int) {
    // add your code here
}

您甚至可以添加第二个或第三个侦听器。

代码语言:javascript
运行
复制
// 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()在初始启动时不会被调用,所以如果您想在第一页上采取行动,就需要在此侦听器方法之外执行它。

祝好运!

票数 4
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45513455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档