2017-08-04 80 views

回答

16

我發現這很簡單,但花了我的時間,因爲我是新的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) { 

      } 

     }) 
我們 ActivityFragment

,或者我們可以實現ViewPager.OnPageChangeListener就用viewPager?.addOnPageChangeListener(this)但一定要實現overrided方法。

+6

* 1提示*:當你不知道該怎麼做時?保持光標在這裏並按下CTRL + SHIFT +空格鍵。 –

+0

@ holi-java謝謝你的提示。 – Rahul

+0

沒有。我認爲這對你有用。 :) –

0

如果您想進一步利用Kotlin的強大功能,可以通過爲三種方法中的每一種創建您自己的自定義偵聽器來簡化對ViewPager.OnPageChangeListener的使用。每個監聽器處理OnPageChangedListener: onPageScrolled(), onPageSelected() and onPageScrollStateChanged()中定義的一個動作。 反正你只是重寫其中一個方法,這樣你可以快速添加一個實現你想做的事,而不用擔心其他兩種方法。這是類似於Butterknife與它的註解@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(),所以你可以創建一個),你可以在你的Activity中實現它們。

// MyActivity.kt 
viewPager.addOnPageChangeListener(ViewPagerOnPageSelected([email protected]::onPageSelected)) 

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

你甚至可以添加第二個或第三個偵聽

// MyActivity.kt 
viewPager.addOnPageChangeListener(ViewPagerOnPageSelected([email protected]::onPageSelected)) 
viewPager.addOnPageChangeListener(ViewPagerScrollStateChanged([email protected]::onPageScrollStateChanged)) 

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

private fun onPageScrollStateChanged(state: Int) { 
    // add your code here 
} 

科特林這是偉大的,但它不僅適用於ViewPager聽者但對於任何Android界面,需要多種方法,甚至被覆蓋儘管你只關心重寫一個。

注意: 不要忘記,監聽器的onPageSelected()在初始啓動時不會被調用,所以如果您想在第一頁上執行操作,您需要在此監聽器之外執行操作方法。

祝你好運!