解决方法
是的,这是一个反mvp模式.基于MVP中的
passive view,您失去了可测试性,因为您不必在演示者中处理Android框架.
所以最好从视图层管理应用程序的导航.
class MyPresenter { MyPresenter.View view; void backButtonClicked() { view.navigatetoHomeScreen(); } public interface View { void navigatetoHomeScreen(); } } class MyActivity extends Activity implements MyPresenter.View { @Override void navigatetoHomeScreen() { startActivity(...) } @OnClick(R.id.my_button) void onClick() { presenter.backButtonClicked(); } }
这种方式的另一个优点是,使用片段或视图来替换活动将很容易.
编辑1:
Morgwai表示这样会打破分离关注和单一责任,但是你不能在每一个地方都有单一的责任.有时你需要违反它.以下是Google for MVP的一个例子:
TaskDetailPresenter
调用ShowEditTask
,它负责在TaskDetailFragment中打开一个新的Activity.
但也可以使用CommandPattern这是一个更好的方法
interface NavigationCommand { void navigate(); }
所以,Presenter会在需要的时候使用它.
原文地址:https://www.jb51.cc/android/310706.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。