在 Android 開發中常常須要使用 ViewPager ,大多數的功能相似但每次都須要寫 Adapter 和一堆模板代碼。
目前咱們不少項目都使用了 Kotlin 和 Databinding,爲了簡潔快速地構建 ViewPager,我使用 DSL 和 Databinding 的特性寫了一個用於快速建立 PagerAdapter 的工具XDslPagerAdapter
。java
下面經過建立一個歡迎畫面舉例說明: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()
})
}
}
}
複製代碼
xDslPagerAdapter()
開始建立PagerAdapter
PagerAdapter
內部使用 item()
開始建立Item
,其中layout
是必須的參數。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