【发布时间】:2018-12-15 00:31:03
【问题描述】:
考虑到在 Android 中,您需要一个包上下文才能使用意图从当前活动中膨胀下一个活动。但是,对于 MVP,presenter 意味着是一个纯 Java 类,它不会像 Android 框架本身那样依赖于依赖项。
在视图中实现两个方法是否合适;一种要求演示者显示新视图 showNew(IView activity) 然后演示者通过将新视图传回当前视图并要求它使用其(活动)上下文来授权此请求膨胀请求的下一个视图。
换句话说,演示者仍然是命令创建下一个视图的人,只是它是通过当前视图的上下文来完成的。
参见下面的示例代码:
查看界面
public interface IBaseView{
void showAnother(Class nextActivity);
}
演示者界面
public interface IBasePresenter {
void showNew(IBaseView nextActivity);
}
具体演示者
public class Presenter implements IBasePresenter {
IBaseView view;
public Presenter(IBaseView view){
this.view = view;
}
@Override
public void showNew(IBaseView nextActivity) {
view.showAnother(nextActivity.getClass());
}
Android 活动
public class SampleActivity extends AppCompatActivity implements IBaseView{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
}
public void onClick(View view){
Presenter presenter = new Presenter(this);
presenter.showNew(new SampleNextActivity());
}
@Override
public void showAnother(Class nextActivity) {
Intent intent = new Intent(this, nextActivity);
startActivity(intent);
}
}
Android 下一个活动
public class SampleNextActivity extends AppCompatActivity implements IBaseView {
//activity details here
}
总结
视图创建下一个视图,但仅在演示者的指示下。因为演示者需要当前视图的上下文才能扩展下一个视图。
问题
这种方法是否违反了 MVP 方法
如果 (1) 违规或不够干净,是否有更好的方法让演示者创建视图(无需了解 Android 上下文类)?
【问题讨论】:
标签: java android mvp android-mvp clean-architecture