Где мы должны обновить модель в MVVM - PullRequest
1 голос
/ 14 мая 2019

Я учу MVVM.Я читал пример кода https://codelabs.developers.google.com/codelabs/android-room-with-a-view о MVVM.Существует сущность Book, и она обновилась из действия, подобного следующему:

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

Но я думаю, что у нас не должно быть экземпляра модели в слое View, и мы должны делать это в ViewModel, а не в View,Что-то вроде следующего кода в представлении:

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

Мой вопрос: можем ли мы создать экземпляр сущности в представлении и как правильно это сделать?

1 Ответ

0 голосов
/ 14 мая 2019

Вы должны обновить класс модели только в View Model ..

Создать интерфейс для действия IContract.java

 public interface IContract {

    interface View 
    {
        public void displayModelData();

    }

    interface ViewModel 
    {
        public Book setModelData();
        public Book getModelData();
    }
}
  • Затем реализуйте интерфейс View в классе Activity и View Model Interface в классе ViewModel.
  • Теперь создайте ссылочный объект ViewModel в классе Activity.

  • , где мы можемпередать данные из ViewModel в View, используя этот объект

Класс активности MainActivity.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);
        }

    }
}

MainActivityViewModel.Ява

  public class MainActivityViewModelimplements IContract.ViewModel

{
    Context context;
    Book book;

    public void MainActivityViewModel (Context context)
    {
        this.context = context;
    }


    @Override
    public void setModelData ()
    {
        book = new Book(); // update model class.
        book.setName(x);
    }

    @Override
    public Book getModelData ()
    {
        return book; //return the object to the view
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...