如题,在实际项目中,经常要控制 ViewPager2 的翻页,频繁操作时,可以使用 databinding 使用变量来可以轻松控制,一次定义,终生受益
双向绑定的写法
@BindingAdapter(value = ["ViewPager2_currentItem"],
requireAll = false)
fun ViewPager2_currentItem(
view: ViewPager2,
currentItem:Int
) {
view.currentItem = currentItem
}
@BindingAdapter("ViewPager2_currentItemChange",
requireAll = false)
fun ViewPager2_currentItemChange(
view: ViewPager2,
inverseBindingListener: InverseBindingListener?
) {
if (inverseBindingListener == null) {
} else {
view.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
inverseBindingListener.onChange()
}
})
}
}
/**
反向获取 get 值
*/
@InverseBindingAdapter(attribute = "ViewPager2_currentItem", event = "ViewPager2_currentItemChange")
fun ViewPager2_currentItem(view: ViewPager2):Int {
return view.currentItem
}
用法
在你的布局中这样写
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/fragment_list"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/tab2Layout"
app:layout_constraintBottom_toBottomOf="parent"
ViewPager2_currentItem="@={vm.currentTab}"
/>
对应的 viewModel 里这样定义变量
/**
* 当前选中 tab
*/
val currentTab = ObservableInt(0)