我已經實現了這個場景,其中我有一個導航抽屜,其中嵌入的片段被添加到帶有標記的後端堆棧。每個片段具有以下實現的:廣播接收器和片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (rootView == null) {
rootView = inflater.inflate(R.layout.fragment_feed, container,
false);
// Doing initialisaion here
} else {
((ViewGroup) rootView.getParent()).removeView(rootView);
}
return rootView;
這是我能想到的,以保持我的這些片段中的列表和它們的動態頁眉和頁腳(約在這裏實現了一種新方法已經在考慮)的最佳方式。
而且我有這些節目在用戶LOGES了我的應用程序,這樣我刷新這些列表,或當位置的變化:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
locationBroadcastReciever,
new IntentFilter(UpdateLocationIntentService.LOCATION_CHANGED));
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
significantBroadcastReciever,
new IntentFilter(UserDefaultsManager.SIGNIFICANT_CHANGED));
// Further code here
}
當片段是分離的,在分離被稱爲:
@Override
public void onDetach() {
super.onDetach();
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(
locationBroadcastReciever);
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(
significantBroadcastReciever);
// This is also where I cancel any pending request for fetching data
};
這種方式現在正在工作,但我必須檢查請求何時完成是否某些視圖已被銷燬,因爲onDestroyView在我用另一個替換片段時調用,但onDetach因片段處於打開狀態而未被調用回到棧和我ts尚未分離。
當前帶有視圖空指針檢查的實現允許我在用戶註銷(或登錄)或位置發生變化時同時更新4個片段,並且列表中沒有先前的項目。
我相信有更好的方法,但我似乎無法在我嘗試過的其他任何方面獲得相同的結果。
看起來你可以從EventBus – cYrixmorten 2014-10-28 19:17:15
看看,或者你可以嘗試Otto替代EventBus。 – 2014-10-30 13:06:03
謝謝你的建議。我認爲我們沒有走上正軌。事件通過我的片段傳播(這不是問題)。我做了一個更好的解決方法,設置一個標誌,以便片段需要更新,每當onResume被調用時,我會做這個刷新(這樣我不必擔心我的視圖爲空)。 – 2014-10-30 23:34:43