StartActivityForResult с компонентами архитектуры MVVM - PullRequest
0 голосов
/ 29 сентября 2018

В одной из кодовых меток Google Activity1 отображает RecyclerView, и при нажатии кнопки открывается Activity2, где можно добавить новую запись.

Вместо доступа к ViewModel в Activity2 и, добавив запись в базу данных напрямую, они отправляют запись обратно на Activity1 и вставляют ее туда.

В чем причина этого?Зачем отправлять данные обратно на Activity1?Почему бы не позвонить ViewModelProviders.of(this) в Activity2 и вставить туда запись?

FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, NewWordActivity.class);
            startActivityForResult(intent, NEW_WORD_ACTIVITY_REQUEST_CODE);
        }
    });
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == NEW_WORD_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
        Word word = new Word(data.getStringExtra(NewWordActivity.EXTRA_REPLY));
        mWordViewModel.insert(word);
    } else {
        Toast.makeText(
                getApplicationContext(),
                R.string.empty_not_saved,
                Toast.LENGTH_LONG).show();
    }
}

Источник: https://github.com/googlecodelabs/android-room-with-a-view/blob/master/app/src/main/java/com/example/android/roomwordssample/MainActivity.java

1 Ответ

0 голосов
/ 29 сентября 2018

Глядя на класс NewWordActivity, он очень прост и не требует собственного ViewModel.Я предполагаю, что нужно избегать необходимости создавать его для единственной цели - вставить запись в базу данных, возлагая эту ответственность на MainActivity.

...