2016-09-07 45 views
2

我正在學習模型查看演示者Android版MVP for Android,我們應該如何提供一個帶有arugments的片段?

我已經經歷了許多教程和例子,但它似乎沒有演示我們應該如何給出一個片段參數。

讓我經歷的我是什麼意思

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:在我的例子,我知道兩個片段直接與對方是壞的,但它僅僅是這個樣本實際上是在相互交流問題我有一天!

回答

1

我管理這類事情的方式是在我的模型中有一個代表當前選定數據的值。

希望下面的圖給你我的意思是一個好主意:

MVP Burger Diagram

在實踐中,你大概會保持你的漢堡數據在本地數據庫中。 BurgerListPresenter向模型詢問將加載數據庫的所有Burgers列表。

當用戶選擇漢堡時,演示者將該數據放回到模型中。例如,這可以作爲所選漢堡的ID存儲在SharedPrefs中。

BurgerDetailsPresenter詢問當前所選漢堡的模型。該模型將檢查SharedPrefs的當前漢堡的ID,然後從數據庫中加載它。

這樣兩個片段完全不知道對方,兩個演示者也是如此。

相關問題