首页 > 解决方案 > 使用双向数据绑定和 Livedata 时视图启用不起作用

问题描述

我想根据是否选中 CheckBox 启用 EditText 字段:

在此处输入图像描述 在此处输入图像描述

该应用程序按预期工作,直到我开始使用 LiveData 启用/禁用复选框(禁用复选框不再将 EditText 设置为启用 = false)。结果复选框未选中,EditText 字段仍启用:

在此处输入图像描述

视图模型代码:

class FirestoreViewModel : ViewModel() {

var firebaseRepository = FirestoreRepository()

val userItem = firebaseRepository.getUserItem() as MutableLiveData<UserItem>}

Activity 代码(绑定布局和视图模型):

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    //to show problem: binding = FragmentLivedataBinding.inflate(layoutInflater)
    val binding = FragmentNoLivedataBinding.inflate(layoutInflater)

    binding.lifecycleOwner = this

    val model: FirestoreViewModel by viewModels()

    binding.viewmodel = model

    setContentView(binding.root)
}

layout.xml 文件使用 LiveData 来设置 CheckBox (FragmentLivedata):

<CheckBox
                android:id="@+id/checkBox1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:checked="@={viewmodel.userItem.player1Active}"/>

            <EditText
                android:id="@+id/textView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:importantForAutofill="no"
                android:inputType="textPersonName"
                android:text="@={viewmodel.userItem.player1Name}"
                android:enabled="@{viewmodel.userItem.player1Active}"
                tools:text="User Name" />

没有 LiveData (FragmentNoLivedata):

<CheckBox
                android:id="@+id/checkBox1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:checked="true"/>

            <EditText
                android:id="@+id/textView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:importantForAutofill="no"
                android:inputType="textPersonName"
                android:text="@={viewmodel.userItem.player1Name}"
                android:enabled="@{checkBox1.checked}"
                tools:text="User Name" />

请帮我找到这个问题的正确解决方案。

标签: android-databindingandroid-livedataandroid-architecture-components

解决方案


推荐阅读