Android: 通过LiveData数据绑定勾选和取消勾选开关按钮
Android: Check & Uncheck Switch Button Through DataBinding with LiveData
我目前正在尝试使用数据绑定来设置我的 Switch 按钮的检查状态,但出于某种原因我的状态从未改变?
在我的设置页面中,我执行以下操作:
- 检查开关是否为真
- Post 我的 livedata 变量的值
- 退出设置页面
- 重新输入设置
- 应该检查 Switch,因为在我的 XML 中我绑定了它,但它是错误的。
文件 - SettingsFragment - SettingsViewModel - SettingsLayout.XML
SettingsViewModel
private val _checked = MutableLiveData<Boolean>()
val checked : LiveData<Boolean> = _checked
SettingsLayout.XML
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center"
android:layout_marginRight="@dimen/margin_big
android:checked="@{viewModel.checked}"/>
我已经仔细检查以确保在我的 SettingsFragment 中我也做了 DataBindingUtil.inflate 并通过了我的 SettingsViewModel .
您需要像这样使用Two-way data binding:
android:checked="@={viewModel.checked}"
编辑:确保在您的片段中添加 binding.lifecycleOwner = viewLifecycleOwner
。
我目前正在尝试使用数据绑定来设置我的 Switch 按钮的检查状态,但出于某种原因我的状态从未改变?
在我的设置页面中,我执行以下操作:
- 检查开关是否为真
- Post 我的 livedata 变量的值
- 退出设置页面
- 重新输入设置
- 应该检查 Switch,因为在我的 XML 中我绑定了它,但它是错误的。
文件 - SettingsFragment - SettingsViewModel - SettingsLayout.XML
SettingsViewModel
private val _checked = MutableLiveData<Boolean>()
val checked : LiveData<Boolean> = _checked
SettingsLayout.XML
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center"
android:layout_marginRight="@dimen/margin_big
android:checked="@{viewModel.checked}"/>
我已经仔细检查以确保在我的 SettingsFragment 中我也做了 DataBindingUtil.inflate 并通过了我的 SettingsViewModel .
您需要像这样使用Two-way data binding:
android:checked="@={viewModel.checked}"
编辑:确保在您的片段中添加 binding.lifecycleOwner = viewLifecycleOwner
。