2011-12-01 38 views
0

假設我有一個包含兩個FragmentActivity,FragActivityA和FragActivityB實例以及兩個ListFragments,FragA和FragB的應用程序。FragmentActivities與片段的角色/責任

在肖像中,FragActivityA呈現FragA,並在選擇時開始呈現FragB的FragActivityB。

FragA應該爲ListView實現OnItemClickListener(某些網絡業務在印刷機上執行)還是FragActivityA? FragA應該顯示一個DialogFragment,還是應該回調FragActivityA來顯示它?

在風景中,FragActivityA同時呈現FragA和FragB。現在,如果上面的答案是肯定的,FragActivityA需要包含FragActivityB的大部分方法,複製大部分代碼。如果答案是否定的,那麼FragA或FragB需要自己呈現和處理DialogFragments。

我正在尋找一些關於我應該在哪裏編寫大部分代碼(我的直覺是在碎片內)的指導,但顯示DialogFragments的碎片對我來說似乎很陌生。

回答

1

說我有兩個FragmentActivity,FragActivityA和FragActivityB實例和兩個ListFragments,FragA和FragB實例的應用程序。

我有一個應用程序與兩個FragmentActivity,FragActivityA和FragActivityB實例,和兩個ListFragments,FragA和FragB。

哦,不,等一下,你沒有字面上的意思,我說... :-)

弗拉加是否應實施OnItemClickListener爲ListView(一些網絡業務上按執行),或FragActivityA?

FragA應覆蓋onListItemClick()。此時發生的事情取決於涉及的業務邏輯。您指出「某些網絡業務是在印刷機上執行的」,這聽起來像您正在向IntentService發送命令或可能產生AsyncTask。我目前的想法是,這些事情也可以通過FragA完成,但我對此沒有信心,特別是因爲我對你的應用程序瞭解不多。

應該FragA顯示一個DialogFragment,還是應該有一個回調FragActivityA來顯示它?

理想情況下,兩者都不。設計你的用戶界面來鎖定用戶的活動,而不是整個活動。 IOW,儘量減少對話的使用。

無論如何,我的一般指導是片段處理所有限於片段本身(及其基礎數據模型)範圍的工作。超越多個片段的事件應該被波及到活動,然後負責將事件傳遞給另一個現有片段(如果它由此活動加載)或啓動另一個活動。用MVC術語來說,你的片段就是你的控制器,並且片段之間的活動處理協調事件(如果需要的話,還有活動之間的活動)。

現在,如果上述答案是肯定的,FragActivityA需要包含FragActivityB的大多數方法,複製大部分代碼。

這聽起來像他們應該從實現共同邏輯的普通AbstractFragActivity繼承。

+0

非常感謝。絕對有些事情需要我去考慮。 – Alex