如何解决如何将MutableLiveData <Boolean>绑定到复选框
问题在于,即使我取消选中复选框,当我单击按钮时,Toast消息也始终显示checked
为真
class MainActivity : AppCompatActivity() {
private lateinit var binding: MainActivityLayoutBinding
var checked = MutableLiveData<Boolean>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
checked.value = true
binding = DataBindingUtil.setContentView(this,R.layout.main_activity_layout)
binding.checked = checked.value
binding.lifecycleOwner = this
binding.showValue.setOnClickListener{
Toast.makeText(this,checked.value.toString(),Toast.LENGTH_SHORT).show()
}
}
}
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable
name="checked"
type="Boolean" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check"
android:id="@+id/checkBox"
android:checked="@={checked}"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Salva"
android:id="@+id/showValue"/>
</LinearLayout>
</layout>
解决方法
这是因为您设置了checked.value = true 尝试删除此行
,删除此行
binding.checked = checked.value
观察live-data
的变化,然后更新绑定视图
checked .observe(this,Observer {
binding.checked = it
})