android - StartActivityForResult 与 MVVM 架构组件

标签 android android-viewmodel android-architecture-components android-mvvm

在其中一个 Google 代码实验室中,Activity1 显示一个 RecyclerView,单击按钮会打开 Activity2,可以在其中添加新条目。

他们不是访问 Activity2 中的 ViewModel 并将条目直接添加到数据库,而是将条目发送回 Activity1 并将其插入那里。

这背后的原因是什么?为什么要将数据发送回 Activity1?为什么不在 Activity2 中调用 ViewModelProviders.of(this) 并在其中插入条目?

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

最佳答案

看看 NewWordActivity 类,它非常简单,不需要它自己的 ViewModel。我的猜测是,这是为了避免为了将一个条目插入数据库这一单一目的而创建一个,并将该责任交给 MainActivity。

关于android - StartActivityForResult 与 MVVM 架构组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52567419/

相关文章:

AndroidViewModel 与 ViewModel

android - 从 Room DB 获取单个项目。从 View 模型调用函数

安卓机房 : LiveData callback of update insert?

android - 如何执行更新 UI View Android 的后台作业

android - 如何在共享首选项中存储多个播放列表

java - 将 Button OnClick 与 Fragment 中 RecyclerView 内的 Row OnClick 分开

android - 使用自定义转换器的两种方式数据绑定(bind)

java - 如何正确使用 Dagger2 和新的 Android 架构组件

android - 当 View 模型中更新另一个 LiveData 时触发 LiveData 成员的更新

java - Android studio 1.1 - 更改用于运行 studio 的 JRE