android - 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
(在本例中为)Fragment
inonDestroy()
方法:
@Override
public void onDestroy() {
super.onDestroy();
mPresenter.dropView();
}
并采用View
inonResume()
方法:
@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
解决方案
推荐阅读
- javascript - 将 PNG 图像从后端保存到前端到本地 Angular 项目文件夹
- python - Python:从与其他元素同名的自闭合元素中提取属性
- c++ - 检索磁盘读/写最大速度(以编程方式)
- vue.js - in Vue:ElementUI的el-table中的cell-class-name和row-class-name是怎么实现的?
- java - 休眠分页错误接近极限 - SQL 服务器
- python - 在 Makefile 中使用环境变量作为 python 参数失败
- javascript - 如何在不声明的情况下使用新数组扩展数组
- linux - 用 pwd 和 awk 理解 shell 中的美元
- angular - Angular Subcribe - 类型 'Subscription' 缺少来自类型 'ToDo[]' 的以下属性:length、pop、push、concat 和另外 26 个
- html - 为移动设备调整页脚大小