【发布时间】:2014-10-28 18:35:26
【问题描述】:
我已经实现了这个场景,其中我有一个带有嵌套片段的导航抽屉,这些片段被添加到带有标签的后堆栈中。每个片段都实现了以下内容:
@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;
这是我认为在这些片段及其动态页眉和页脚中维护我的列表的最佳方式(已经考虑在此处实施一种新方法)。
此外,当用户退出我的应用以便我刷新这些列表时,或者当位置发生变化时,我会收到这些广播:
@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
}
分离片段时调用on detach:
@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 因为片段位于后堆栈上而且它还没有分离。
当前的视图 nullpointer 检查实现允许我在用户注销(或登录)或位置更改并且列表中之前没有项目时同时更新 4 个片段。
我确信有更好的方法,但我尝试其他方法似乎无法获得相同的结果。
【问题讨论】:
-
看起来你可以从 EventBus 中受益
-
或者您可以尝试使用 Otto 来替代 EventBus。
-
感谢您的建议。我不认为我们走在正确的轨道上。事件通过我的片段传播(这不是问题)。我通过设置一个标志做了一个更好的解决方法,以便需要更新片段,并且每当调用 onResume 时我都会进行刷新(这样我就不必担心我的视图为空)。
-
它解决了我的问题,但如果活动处于活动状态,它不会更新,我的意思是没有暂停。
标签: android android-fragments broadcastreceiver