Android databinding 当对象字段更改时,LiveData更新值
今天,我尝试使用LiveData(MutableLiveData)对象来获得一些动力学值。(在MVVM模式中) 我使用的模型对象如下所示: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
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)}”
。