使用 XDslPagerAdapter 快速建立 ViewPager

在 Android 開發中常常須要使用 ViewPager ,大多數的功能相似但每次都須要寫 Adapter 和一堆模板代碼。
目前咱們不少項目都使用了 Kotlin 和 Databinding,爲了簡潔快速地構建 ViewPager,我使用 DSL 和 Databinding 的特性寫了一個用於快速建立 PagerAdapter 的工具XDslPagerAdapterjava

下面經過建立一個歡迎畫面舉例說明:git

binding.guideViewPager.run {
            xDslPagerAdapter {
                item(R.layout.pager_guide) {
                    model(BR.model to Page(0, R.drawable.img_tutorial01, "下一頁"))
                    click(BR.click to { _: Page -> currentItem = 1 })
                    action { binding ->
                        (binding as? PagerGuideBinding)?.run {
                            (nextPageButton.layoutParams as? ViewGroup.MarginLayoutParams)?.run {
                                marginStart = dp2px(30F)
                                marginEnd = dp2px(30F)
                            }
                        }
                    }
                }
                item(R.layout.pager_guide) {
                    model(BR.model to Page(1, R.drawable.img_tutorial02, "下一頁"))
                    click(BR.click to { _: Page -> currentItem = 2 })
                }
                item(R.layout.pager_guide) {
                    model(BR.model to Page(2, R.drawable.img_tutorial03, "下一頁"))
                    click(BR.click to { _: Page -> currentItem = 3 })
                }
                item(R.layout.pager_guide) {
                    model(BR.model to Page(3, R.drawable.img_tutorial04, "開始使用"))
                    click(BR.click to { _: Page ->
                        SharedPrefModel.isFistTime = false
                        startActivity(Intent(context, MainActivity::class.java))
                        finish()
                    })
                }
            }
        }
複製代碼
  1. 首先調用 ViewPager 的拓展方法xDslPagerAdapter()開始建立PagerAdapter
  2. PagerAdapter內部使用 item()開始建立Item,其中layout是必須的參數。
  3. Item內部能夠使用的方法有model()``click()``action
    • model()傳入包含 DataBinding 的 BR.Id 和對應的 Model(類型爲你 ViewModel 的類型,用來綁定顯示相關數據)
    • click()傳入包含 DataBinding 的 BR.Id 和對應的 Click(類型爲Function<Any>用來綁定點擊事件),多個點擊事件可屢次調用。
    • action()可用來獲取 Databinding 爲 layout 的 ViewDataBinding 類,用來處理其它的內容,例如動態改變佈局等。

源碼也很簡單 源碼地址 github.com/xiejinpeng0…github

相關文章
相關標籤/搜索