App*_*evo 5 java mvp android dependency-injection android-mvp
我见过 Android 中 MVP 模式的两种方法。两者都在Android 架构蓝图中使用:
public interface Contract {
interface View {
void showData(String data);
}
interface StartVersionPresenter {
void start();
}
interface DropViewVersionPresenter {
void takeView(View view);
void dropView();
}
}
Run Code Online (Sandbox Code Playgroud)
1)通过构造函数注入视图的演示者:
public class StartVersionPresenter implements Contract.StartVersionPresenter {
private final Contract.View view;
private final Repository repository;
public StartVersionPresenter(Contract.View view, Repository repository) {
this.view = view;
this.repository = repository;
}
@Override
public void start() {
loadData();
}
private void loadData() {
repository.getData(new DataCallback() {
@Override
public void onDataLoaded(String someData) {
view.showData(someData);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
start()onResume() Fragment在的方法中调用。
2)通过方法(takeView(在我的示例中):
public class DropViewVersionPresenter implements Contract.DropViewVersionPresenter {
private final Repository repository;
private Contract.View view;
public DropViewVersionPresenter(Repository repository) {
this.repository = repository;
}
@Override
public void takeView(Contract.View view) {
this.view = view;
loadData();
}
@Override
public void dropView() {
view = null;
}
private void loadData() {
repository.getData(new DataCallback() {
@Override
public void onDataLoaded(String someData) {
if (view != null)
view.showData(someData);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
takeView(Contract.View view)Fragment在的方法中调用onResume()。
dropView()Fragment在的方法中调用onDestroy()。
在这两种情况下,演示者都是在以下位置创建的Fragment的onCreate()方法中创建的。
为什么第二种方法比第一种方法用得更多?我可以看到第一个更简单,因为如果我们想调用视图上的方法,则不必检查视图是否不为空。
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |