Android的MVP,我们应该如何提供一个带有arugments的片段?

时间:2016-09-07 21:31:57

标签: android android-fragments mvp

我正在学习Android版的模型视图演示器

我已经通过了许多教程和示例,但似乎没有证明我们应该如何提供片段参数。

让我来看看我的意思

的例子

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 在我的例子中,我知道两个片段直接相互通信是不好的,但它只是针对这个样本,实际上是另一天我有另一个问题!< / p>

1 个答案:

答案 0 :(得分:1)

我管理这类事情的方法是在我的模型中有一个代表当前所选数据的值。

希望以下图表能让您了解我的意思:

MVP Burger Diagram

在实践中,您可能会将您的Burger数据保存在本地数据库中。 BurgerListPresenter向模型询问是否会加载db的所有Burgers列表。

当用户选择汉堡时,演示者会将此数据放回模型中。例如,这可以存储为SharedPrefs中所选汉堡的id。

BurgerDetailsPresenter询问模型当前所选的汉堡。该模型将检查SharedPrefs中当前汉堡的id,然后从数据库加载它。

这样两个片段完全没有意识到,两个演示者也是如此。