Сегодня я пытаюсь использовать объект 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;
}
});
}
}
Я использую ViewModel следующим образом:
public class MainViewModel {
public MutableLiveData<Object> obj;
public MainViewModel(){
this.obj = new MutableLiveData<>();
this.obj.postValue(new Object("Name", 50.0f);
}
}
В основном фрагменте:
public class MainFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
MainViewModel viewModel = ViewModelProviders.of(this).get(MainViewModel.class);
MainFragmentBinding binding = MainFragmentBinding.inflate(getLayoutInflater());
binding.setViewModel(viewModel);
binding.setLifecycleOwner(this);
return binding.getRoot();
}
}
И в поле зрения:
<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>
Я бы хотел обновить свое представление при обновлении значений (out1, out2) моей модели (при выполнении вычисления).
Как я могу это сделать?