【发布时间】:2021-11-01 07:33:57
【问题描述】:
我有一个 ListView 并尝试使用双向数据绑定在 ViewModel 中使用 Two-Way Attributes 设置 selectedItemPosition
但问题是它不起作用,所选项目没有设置在 liveData 的值中,我试图观察它,当我在listView 中选择一个项目时,值永远不会改变
XML 中的数据绑定:
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="@dimen/_150sdp"
android:nestedScrollingEnabled="true"
tools:listheader="@tools:sample/lorem"
tools:visibility="visible"
android:choiceMode="singleChoice"
android:selectedItemPosition="@={viewModel.chosenPosition}" />
在 ViewModel 中:
val chosenPosition = MutableLiveData<Int>()
在片段中:
binding.viewModel = viewModel
binding.lifecycleOwner = viewLifecycleOwner
binding.teamsListView.adapter = ArrayAdapter(
context,
R.layout.list_item_choice, teamsNames
)
viewModel.chosenPosition.observe(viewLifecycleOwner) {
Timber.d("chosen position = $it") //never triggers when I select an item in the ListView
}
【问题讨论】:
-
如何更改
viewModel.chosenPosition? -
通过在列表视图中选择一个项目,它应该通过数据绑定设置值
android:selectedItemPosition="@={viewModel.chosenPosition}" -
你是从哪里得到这个属性的?你有 BindingAdapter 吗?
-
@Zain 来自此链接先生developer.android.com/topic/libraries/data-binding/…
标签: android data-binding android-databinding 2-way-object-databinding