Android 如何使用MutableLiveData进行数据绑定<;布尔值>;安卓系统的按钮:启用?
我有一份登记表,我有一个很大的条件继续。为简单起见,我有一个Android 如何使用MutableLiveData进行数据绑定<;布尔值>;安卓系统的按钮:启用?,android,data-binding,Android,Data Binding,我有一份登记表,我有一个很大的条件继续。为简单起见,我有一个编辑文本和一个按钮。我使用MVVM编写,因此我有一个ViewModel()where val stroke=MutableLiveData() 存储。因此,当冲程长度大于5时,必须激活按钮。我是这样做的: 活动 '类MainActivity:AppCompatActivity(){ override-fun-onCreate(savedInstanceState:Bundle?){ super.onCreate(savedInstanc
编辑文本
和一个按钮
。我使用MVVM编写,因此我有一个ViewModel()
whereval stroke=MutableLiveData()
存储。因此,当冲程长度大于5时,必须激活按钮。我是这样做的:
活动
'类MainActivity:AppCompatActivity(){
override-fun-onCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
val binding=DataBindingUtil.setContentView(this,R.layout.activity_main)
val viewModel=ViewModelProviders.of(this.get)(MainViewModel::class.java)
binding.setLifecycleOwner(此)
binding.model=viewModel
}}
视图模型
class MainViewModel: ViewModel(){
val stroke = MutableLiveData<String>()
val enableButton = MutableLiveData<Boolean>()
get(){
field.value = (stroke.value ?: "").length > 5
return field
}}
class MainViewModel:ViewModel(){
val stroke=MutableLiveData()
val enableButton=MutableLiveData()
得到(){
field.value=(stroke.value?:“”)。长度>5
返回场
}}
xml
似乎enabled只在绑定时询问变量,之后它停止询问并保持绑定时的状态。如何解决这个问题?您可以使用笔划上的变换来实现这一点
val stroke = MutableLiveData<String>()
val enableButton: LiveData<Boolean> = Transformations.map(stroke) { it.length > 5 }
val stroke=MutableLiveData()
val enableButton:LiveData=Transformations.map(stroke){it.length>5}
当
stroke
更改时,enableButton
值也将更改没有人检查更改,直到AGP 3.3.1不适用于我。可能是个虫子。什么是AGP?我在最新版本的AS上运行它,目标是安卓P,没有问题。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="model"
type="nekono.inno.mvvmsample.MainViewModel"/>
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="@={model.stroke}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="49dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:enabled="@{model.enableButton}"
android:text="Button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText" />
</android.support.constraint.ConstraintLayout>
</layout>
val stroke = MutableLiveData<String>()
val enableButton: LiveData<Boolean> = Transformations.map(stroke) { it.length > 5 }