web-dev-qa-db-fra.com

Kotlin - Comment ajouter OnPageChangeListener dans ViewPager

Je suis nouveau dans kotlin, comment puis-je ajouter OnPageChangeListener dans un ViewPager.

viewPager?.addOnPageChangeListener // Now how can I add listener to it.
17
Rahul

J'ai trouvé que c'était assez simple, mais cela m'a pris du temps car je suis nouveau à Kotlin. J'espère que cela sauvera du temps aux autres un jour.

viewPager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {

            override fun onPageScrollStateChanged(state: Int) {
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

            }
            override fun onPageSelected(position: Int) {

            }

        })

ou nous pouvons implémenter ViewPager.OnPageChangeListener dans notre Activity ou Fragment, alors utilisez simplement viewPager?.addOnPageChangeListener(this) mais assurez-vous d'implémenter des méthodes surchargées.

42
Rahul

Si vous souhaitez exploiter la puissance de Kotlin un peu plus loin, vous pouvez simplifier l'utilisation du ViewPager.OnPageChangeListener en créant votre propre écouteur personnalisé pour chacune des trois méthodes. Chaque écouteur gère l'une des actions définies dans la OnPageChangedListener: onPageScrolled(), onPageSelected() and onPageScrollStateChanged(). En règle générale, vous ne remplacez toutefois qu'une des méthodes, ce qui vous permet d'ajouter rapidement une implémentation faisant ce que vous voulez, sans vous soucier des deux autres méthodes. Cela ressemble à ce que Butterknife accomplissait avec ses annotations @OnPageSelected, etc.

Pour ce faire, créez la ou les classes que vous souhaitez utiliser:

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

Maintenant que vous avez vos cours (ou soyez honnête, le plus utilisé est onPageSelected(), vous pouvez donc simplement le créer), vous pouvez les implémenter dans votre activité.

// MyActivity.kt 
viewPager.addOnPageChangeListener(ViewPagerOnPageSelected(this@MyActivity::onPageSelected))

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

Vous pouvez même ajouter un deuxième ou un troisième auditeur

// 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 est idéal pour cela, mais il ne s’applique pas seulement au listener de ViewPager, mais à toutes les interfaces Android nécessitant le remplacement de plusieurs méthodes, même si vous ne voulez en remplacer qu’une.

Remarque: N'oubliez pas que la méthode onPageSelected () de l'écouteur n'est pas appelée au démarrage initial. Si vous souhaitez agir sur la première page, vous devez le faire en dehors de cette méthode.

Bonne chance!!!

0
themichaelscott