我们应该在哪里更新MVVM中的模型

时间:2019-05-14 04:35:53

标签: android mvvm

我正在学习MVVM。我正在阅读有关MVVM的示例代码https://codelabs.developers.google.com/codelabs/android-room-with-a-view。有一个Book实体,它已经从如下所示的活动中进行了更新:

Book book = new Book();
book.setName(x);

但是我认为我们不应在View层中有一个模型实例,而应该在ViewModel中而不是在View中进行。类似于“视图”中的以下代码:

MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.setBookName(x);

我的问题是,我们可以在View中实例化一个实体吗?这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您应仅在“视图模型”中更新模型类。

为活动创建一个接口 IContract.java

timer
  
      
  • 然后在Activity类和ViewModel类中实现View接口。
  •   
  • 现在在Activity类中创建一个引用ViewModel对象。

  •   
  • 我们可以使用该对象将数据从ViewModel传递到View

  •   

活动类 MainActivity.java

 public interface IContract {

    interface View 
    {
        public void displayModelData();

    }

    interface ViewModel 
    {
        public Book setModelData();
        public Book getModelData();
    }
}

MainActivityViewModel.java

public class MainActivity implements IContract.View {
    private IContract.ViewModel viewModel; //create a instance for ViewModel object

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.viewModel = new MainActivityViewModel(getApplicationContext());// object initialisation


        @overide
        public void displayModelData()
        {
            viewModel.setModelData(); // update model class
            Book obj = viewModel.getModelData();// this will get book object from viewModel class.
            Toast(obj.Name);
        }

    }
}