onActivityResult
должно быть делегировано Presenter
. Затем Presenter
должен решить, что делать с результатом. Вопрос в том, как это сделать чистым способом?
В примерах Google есть пример приложения:
https://github.com/googlesamples/android-architecture/blob/todo-mvp-dagger/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksFragment.java#L115-L118
Делегирует результат в Presenter
:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
mPresenter.result(requestCode, resultCode);
}
Но в этом решении есть ошибка . 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
.
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