Android databinding 当对象字段更改时,LiveData更新值

Android databinding 当对象字段更改时,LiveData更新值,android-databinding,android-livedata,android-mvvm,mutablelivedata,Android Databinding,Android Livedata,Android Mvvm,Mutablelivedata,今天,我尝试使用LiveData(MutableLiveData)对象来获得一些动力学值。(在MVVM模式中) 我使用的模型对象如下所示: public class Object { private String name; private float internalvalue; private float in1; private float out1; private float out2; public Object(String nam

今天,我尝试使用LiveData(MutableLiveData)对象来获得一些动力学值。(在MVVM模式中)

我使用的模型对象如下所示:

public class Object {
    private String name;
    private float internalvalue;
    private float in1;
    private float out1;
    private float out2;

    public Object(String name, float internalvalue){
        this.name = name;
        this.internalvalue = internalvalue;
    }

    public float getOut1(){
        return this.out1;
    }

    public float getOut2(){
        return this.out2;
    }

    public void setIn1(float in1){
        this.in1 = in1;

    }

    private void performSomething(float internalvalue, float in1){
        SubClassSingleton.performSomething(internalvalue, in1, new SubClassSingletonListener() {
            @Override
            public void onSuccess(float out1, float out2){
                this.out1 = out1;
                this.out2 = out2;
            }
        });
    }
}
public class MainViewModel {
    public MutableLiveData<Object> obj;

    public MainViewModel(){
        this.obj = new MutableLiveData<>();
        this.obj.postValue(new Object("Name", 50.0f);
    }
}
我使用的ViewModel如下所示:

public class Object {
    private String name;
    private float internalvalue;
    private float in1;
    private float out1;
    private float out2;

    public Object(String name, float internalvalue){
        this.name = name;
        this.internalvalue = internalvalue;
    }

    public float getOut1(){
        return this.out1;
    }

    public float getOut2(){
        return this.out2;
    }

    public void setIn1(float in1){
        this.in1 = in1;

    }

    private void performSomething(float internalvalue, float in1){
        SubClassSingleton.performSomething(internalvalue, in1, new SubClassSingletonListener() {
            @Override
            public void onSuccess(float out1, float out2){
                this.out1 = out1;
                this.out2 = out2;
            }
        });
    }
}
public class MainViewModel {
    public MutableLiveData<Object> obj;

    public MainViewModel(){
        this.obj = new MutableLiveData<>();
        this.obj.postValue(new Object("Name", 50.0f);
    }
}
鉴于:

<layout ...
    <data>
        <variable
            name="viewModel"
            type="app.example.MainViewModel"/>
    </data>
    <LinearLayout
        ...>
        <EditText
            android:text="@={viewModel.obj.in1}"
            .../>
        <TextView
            android:text="@{viewModel.obj.out1}"
            .../>
        <TextView
            android:text="@{viewModel.obj.out2}"
            .../>
    </LinearLayout>
</layout>
试试这个:

您需要使模型类扩展BaseObservable

公共类对象扩展BaseObservable{
私有字符串名称;
私人价值;
私人浮动1;
私人浮出水面1;
私人浮出水面2;
公共对象(字符串名称、浮点值){
this.name=名称;
this.internalvalue=internalvalue;
}
公共浮动getOut1(){
返回此文件。1;
}
公共作废放线1(浮动放线1){
this.out1=out1;
notifyChange();
}
公共浮点数2(){
返回此文件。输出2;
}
公共作废放线2(浮动放线2){
this.out2=out2;
notifyChange();
}
公共无效设置1(浮动设置1){
这个。in1=in1;
}
私有void执行某些操作(float internalvalue,float in1){
performSomething(internalvalue,in1,新的子类SingletonListener(){
@凌驾
成功时的公共无效(浮点输出1、浮点输出2){
出站1(出站1);
出站2(出站2);
}
});
}
}
在视图中,不能将float直接绑定到视图。它必须是字符串,所以按如下方式绑定:

public class Object {
    private String name;
    private float internalvalue;
    private float in1;
    private float out1;
    private float out2;

    public Object(String name, float internalvalue){
        this.name = name;
        this.internalvalue = internalvalue;
    }

    public float getOut1(){
        return this.out1;
    }

    public float getOut2(){
        return this.out2;
    }

    public void setIn1(float in1){
        this.in1 = in1;

    }

    private void performSomething(float internalvalue, float in1){
        SubClassSingleton.performSomething(internalvalue, in1, new SubClassSingletonListener() {
            @Override
            public void onSuccess(float out1, float out2){
                this.out1 = out1;
                this.out2 = out2;
            }
        });
    }
}
public class MainViewModel {
    public MutableLiveData<Object> obj;

    public MainViewModel(){
        this.obj = new MutableLiveData<>();
        this.obj.postValue(new Object("Name", 50.0f);
    }
}

另一种可能性是
android:text=“@{Float.toString(viewModel.obj.in1)}”