如何从ViewModel回调到Android中的视图

时间:2019-01-25 04:12:02

标签: android mvvm

我有ViewModel

  class MyViewModel extends BaseViewModel{
     public void foo(){
      // some code or return some boolean
      }
    }

查看课程

    class MyView extends View{
    private MyViewModel myviewmodel;
        public void bindTo(MyViewModel viewModel) {
    this.viewModel = viewModel;
    context = viewModel.getContext();
    validateView();
    requestLayout();
}
private validateView(){

//some code
}


    }

此绑定视图方法与适配器绑定 每当我将validateView调用时,我都想在Myview类中回调,请向我建议如何从Viewmodel方法回调到android中的View。

2 个答案:

答案 0 :(得分:0)

如果我输入错误,请纠正我

  • 首先您需要创建接口类
public interface ViewModelCallback {
    void returnCallBack(Boolean mBoolean);
}
  • 然后您的View类实现该接口类并覆盖该方法
class MyView extends View implements ViewModelCallback

 @Override
    public void returnCallBack(Boolean mBoolean) {
        //here you will retrieve callback
       // Do Something
    }
  • 接下来,您只需从视图模型传递一个值
class MyViewModel {
    private ViewModelCallback myViewCallBack;

    public void foo() {
        Boolean yourReturnValue = false;
        myViewCallBack.returnCallBack(yourReturnValue);
    }
}

答案 1 :(得分:0)

最佳做法是使用实​​时数据从ViewModel到您的视图进行通信。

class MyViewModel {
    private MutableLiveData<Boolean> state = new MutableLiveData<Boolean>;

    public LiveData<Boolean> getState() {
        return state;
    }
    

    public void foo() {
        //bool = value returned of your work 
        state.setValue(bool);
    } }


class Myview extends View {

    public void onCreate() {
         viewmodel.getState().observe(this, observer); // 'this' is life cycle owner

    }

    final Observer<Boolean> observer = new Observer<Boolean>() {
           @Override
           public void onChanged(@Nullable final Boolean state) {
               // do your work with returned value
           }
    }; }

有关更多详细信息,请参见this