首页 > 解决方案 > Android MVP - 处理 onActivityResult 的正确方法是什么?

问题描述

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(在本例中为)FragmentinonDestroy()方法:

@Override
public void onDestroy() {
    super.onDestroy();
    mPresenter.dropView();  
}

并采用ViewinonResume()方法:

@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

标签: androidandroid-lifecycleonactivityresultandroid-mvp

解决方案


推荐阅读