我正在研究Android的Model View Presenter
我已经看过许多教程和示例,但是似乎都没有演示如何给出片段参数。
让我举一个例子说明我的意思
BurgerListFragment
此片段显示了汉堡的RecyclerView。基础适配器包含代表汉堡的对象数组。
BurgerDetailFragment
当我们从BurgerListFragment
单击汉堡时,此事件将传递给演示者,然后由该演示者传达回应该显示BurgerDetailFragment
的视图。
但是,我们必须传递BurgerDetailFragment
被单击的汉堡对象。
所以通常会是这样
public static BurgerDetailFragment newInstance(Burger burger){
BurgerDetailFragment burgerDetailFragment = new BurgerDetailFragment();
Bundle args = new Bundle();
args.putParcelable(BURGER_KEY,burger);
burgerDetailFragment.setArguments(args);
return burgerDetailFragment;
}
但是,我的困惑来自演示者告诉
BurgerListFragment
显示BurgerDetailFragment
,因为它从模型获取数据并提供给另一个视图,并且视图不应该与模型通信!如有任何疑问,请通知我
注意1:在我的示例中,我知道两个片段彼此直接通信是不好的,但这仅用于此示例,实际上这是我第二天遇到的另一个问题!
最佳答案
我管理这类事情的方法是在模型中具有一个表示当前所选数据的值。
希望下图可以使您对我的意思有所了解:
实际上,您大概会将您的Burger数据保留在本地数据库中。 BurgerListPresenter
向模型询问要加载数据库的所有Burgers的列表。
当用户选择汉堡时,演示者将该数据放回模型中。例如,可以将其作为所选汉堡的ID存储在SharedPrefs中。BurgerDetailsPresenter
向模型询问当前选定的汉堡。该模型将检查SharedPrefs中当前汉堡的ID,然后从数据库中加载它。
这样,两个片段以及两个演示者都完全不知道彼此。