我正在学习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中实例化一个实体吗?这样做的正确方法是什么?
答案 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);
}
}
}