我已经尝试在Internet上的教程中在androidx.viewpager.widget.ViewPager
上添加适配器,以在当前选项卡上获得两种方式的数据绑定。我到了那个适配器
// adapter file
@BindingAdapter("currentTab")
@JvmStatic
fun setTab(pager: ViewPager, itemLiveData: MutableLiveData<Int>) {
itemLiveData.value?.let {
if (pager.currentItem != it) {
pager.setCurrentItem(it, true)
}
}
}
@InverseBindingAdapter(attribute = "currentItem")
@JvmStatic
fun getTab(pager: ViewPager) = pager.currentItem
<!-- layout file -->
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="70dp"
app:adapter="@{viewModel.adapter}"
app:currentTab="@={viewModel.currentItem}"
app:layout_constraintBottom_toTopOf="@+id/tabLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
[当我尝试构建应用程序时,出现此错误(带有--stacktrace
选项):
Could not find event 'currentItemAttrChanged' on View type 'androidx.viewpager.widget.ViewPager'
我找不到任何教程/答案,所以我在这里问是否有人对此有答案。谢谢
您要绑定的每个属性都必须与@BindingAdapter
的名称匹配。Gradle找不到@BindingAdapter("currentTab")
。
您可以-编写currentTab
BindingAdapter及其InverseBindingAdapter进行观察。-或快速解决方案:绑定简单的ViewPager.OnPageChangedListener
并从中实现
@BindingAdapter("onPageChangeListener")
fun ViewPager.bindOnPageChangeListener(listener: ViewPager.OnPageChangeListener) {
addOnPageChangeListener(listener)
}
<!-- layout file -->
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="70dp"
app:adapter="@{viewModel.adapter}"
app:onPageChangeListener="@{viewModel.onPageChangeListener}"
app:layout_constraintBottom_toTopOf="@+id/tabLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">