onActivityResult
应该委托给Presenter
。然后Presenter
应该决定如何处理结果。问题是如何以干净的方式进行操作?
它将结果委托给Presenter
:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
mPresenter.result(requestCode, resultCode);
}
但是此解决方案中存在一个 bug 。 Presenter
使用View
方法删除Fragment
(在这种情况下为onDestroy()
):
@Override
public void onDestroy() {
super.onDestroy();
mPresenter.dropView();
}
并采用View
方法中的onResume()
:
@Override
public void onResume() {
super.onResume();
mPresenter.takeView(this);
}
当我们为结果打开新活动时。然后旋转电话,然后完成当前活动并返回第一个活动,Presenter
将没有View
,因为onActivityResult
将在onResume
之前被调用。 / p>
D/TasksFragment: onCreate
D/TasksFragment: onCreateView
D/TasksFragment: onStart
D/TasksFragment: onResume
--- open new activity for the result ---
D/TasksFragment: onPause
D/TasksFragment: onStop
--- rotate the phone ---
--- finish current activity ---
D/TasksFragment: onDestroy
D/TasksFragment: onCreate
D/TasksFragment: onCreateView
D/TasksFragment: onStart
D/TasksFragment: onActivityResult (called before onResume)
D/TasksFragment: onResume