如何使用观察器将 EditText 中的值与当前项目在 ViewPager 中的位置值进行验证?



我正在使用ViewModel和Livedata。我尝试使用以下代码获取视图模型中视图页面的当前位置

   <android.support.v4.view.ViewPager
            android:id="@+id/moveFromPlansViewPager"
            android:layout_width="0dp"
            android:layout_height="72dp"
            android:layout_marginTop="16dp"
            android:clipToPadding="false"
            android:selectedItemPosition="@={ viewModel.selectedPos }"
            android:paddingStart="16dp"
            android:paddingEnd="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/moveFromHeaderTextView" />

内部视图模型我有

var selectedPos: MutableLiveData<Int> = MutableLiveData()

我在选定位置找到该值,并将其与 EditText 中的值进行比较。不知何故,我认为这个逻辑是正确的。但问题是虽然

 android:selectedItemPosition="@={ viewModel.selectedPos }"

当我将此行添加到布局中时,它会导致数据绑定错误。

e: [kapt] 发生异常:android.databinding.tool.util.LoggedErrorException:发现数据绑定错误。

有人可以帮助我吗???

深入研究错误,它显示如下内容:

****/ data binding error ****msg:Cannot find the getter for attribute 'android:selectedItemPosition' with value type java.lang.Integer on android.support.v4.view.ViewPager **** data binding error ****

实际上,这意味着这个特定属性不能开箱即用(也不能像这样使用它android:selectedItemPosition="2",f.ex.)

有几个替代方案

  • 您可以添加绑定适配器。F.ex.在这里,有一个有前途的
  • 以老式的方式进行:在片段中有一个MutableLiveData selectedPos的观察者,然后手动进行更新:

    viewModel.selectedPos.observe(this, Observer { position ->
            position?.let { moveToSavingsPlansViewPager.setCurrentItem(it, true) }
        })
    

第一个更高级,第二个更容易启动和运行。所以这取决于你。

相关内容

  • 没有找到相关文章

最新更新