在MVVM架构下,建议使用LiveData和ViewModel来实现在Activity之间传递数据。要启动带有结果返回的Activity,我们可以在ViewModel中创建一个LiveData对象来观察结果并将结果返回给Activity。
例如,我们有一个主Activity和一个带有结果返回的子Activity。在主Activity中,我们可以使用以下代码启动子Activity:
Intent intent = new Intent(this, ChildActivity.class);
startActivityForResult(intent, REQUEST_CODE);
然后,在ViewModel中创建一个LiveData对象:
private MutableLiveData resultLiveData = new MutableLiveData<>();
public LiveData getResultLiveData() {
return resultLiveData;
}
在子Activity中,我们可以通过如下方式返回结果:
Intent intent = new Intent();
intent.putExtra("result", "Hello World!");
setResult(Activity.RESULT_OK, intent);
finish();
然后,在子Activity关闭之前,我们可以将结果值存入ViewModel中的LiveData对象中:
((MyViewModel) ViewModelProviders.of(this).get(MyViewModel.class))
.getResultLiveData().setValue(data.getStringExtra("result"));
最后,在主Activity中,我们可以观察LiveData对象中的值,以获取返回结果:
viewModel.getResultLiveData().observe(this, new Observer() {
@Override
public void onChanged(@Nullable String result) {
if (result != null) {
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
}
}
});
这就是在Android MVVM架构下启动带有结果返回的Activity的解决方法。