带有 MVVM 架构组件的 StartActivityForResult

Flo*_*her 5 android android-mvvm android-viewmodel android-architecture-components

在其中一个 Google Codelabs 中,Activity1显示一个RecyclerView和 按钮单击打开Activity2,可以在其中添加新条目。

他们不是访问ViewModelinActivity2并将条目直接添加到数据库中,而是将条目发送回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();
    }
}
Run Code Online (Sandbox Code Playgroud)

来源:https : //github.com/googlecodelabs/android-room-with-a-view/blob/master/app/src/main/java/com/example/android/roomwordssample/MainActivity.java

Iva*_*oll 0

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