Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用MutableLiveData进行数据绑定<;布尔值>;安卓系统的按钮:启用?_Android_Data Binding - Fatal编程技术网

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()
where
val 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 }