Android MVP,如何协调多个视图?
Android MVP, how to coordinate multiple views?
我有一位主持人P
。它旨在控制某种类型视图的所有内容 V
。我有多个这样的视图:V1
、V2
、... Vn
。与一个视图交互 Vx
,可能会对其他视图产生影响 Vy
。
最好的协调方式是什么?主持人应该互相交谈吗?演示者是否应该引用所有视图?
一种方法是演示者 P
持有视图 V
并且视图 V
继承 V1
、V2
、...Vn
。 V
可以跨所有视图容器(片段和活动)访问方法。
public interface MainView extends BaseView, ErrorView{ //V
void showProducts(@Nullable List<Product> products);
}
public interface BaseView{ //V1
void setLoading(boolean loading);
void showConfirmationDialog(@StringRes int title, @StringRes int message);
}
public interface ErrorView{ //V2
void showErrorSnackBar(@StringRes int message);
}
public class ProductListFragment extends ... implements MainView{
}
根据我的经验,除了混乱和空洞的方法之外,这工作正常,就可读性而言并不好。
在您的主要演示者中保存其他演示者的引用是可以的,只要您确保他们还活着。这可能会导致反模式。
另一种方法是分别持有每个演示者,每个演示者独立使用事件:
@Override
public void showProducts(List<Product> products){
// do something with products that Presenter1 has dispatched for presenting
presenter2.doSomethingOnProducts();
}
这是利益相关方之间无缝沟通的结果。
混合 Observer
模式和 MVP 也很好。
一个视图应该对其他视图一无所知。 View 应该只与其 Presenter 通信。一个 Presenter 也不应该知道其他 Presenter。为避免演示者凝聚使用事件(EventBus、Otto、RxJava Subjects...)。
我有一位主持人P
。它旨在控制某种类型视图的所有内容 V
。我有多个这样的视图:V1
、V2
、... Vn
。与一个视图交互 Vx
,可能会对其他视图产生影响 Vy
。
最好的协调方式是什么?主持人应该互相交谈吗?演示者是否应该引用所有视图?
一种方法是演示者 P
持有视图 V
并且视图 V
继承 V1
、V2
、...Vn
。 V
可以跨所有视图容器(片段和活动)访问方法。
public interface MainView extends BaseView, ErrorView{ //V
void showProducts(@Nullable List<Product> products);
}
public interface BaseView{ //V1
void setLoading(boolean loading);
void showConfirmationDialog(@StringRes int title, @StringRes int message);
}
public interface ErrorView{ //V2
void showErrorSnackBar(@StringRes int message);
}
public class ProductListFragment extends ... implements MainView{
}
根据我的经验,除了混乱和空洞的方法之外,这工作正常,就可读性而言并不好。
在您的主要演示者中保存其他演示者的引用是可以的,只要您确保他们还活着。这可能会导致反模式。
另一种方法是分别持有每个演示者,每个演示者独立使用事件:
@Override
public void showProducts(List<Product> products){
// do something with products that Presenter1 has dispatched for presenting
presenter2.doSomethingOnProducts();
}
这是利益相关方之间无缝沟通的结果。
混合 Observer
模式和 MVP 也很好。
一个视图应该对其他视图一无所知。 View 应该只与其 Presenter 通信。一个 Presenter 也不应该知道其他 Presenter。为避免演示者凝聚使用事件(EventBus、Otto、RxJava Subjects...)。