我在ViewPager上有5个片段(它们全部都在内存中,onPause(),并且在屏幕上包含Activity时从不调用它们。)
无论如何,我需要更新一个片段(GroupsListFragment),具体取决于另一个片段(TimetableListFragment)中发生的事情。我正在使用LocalBroadcastManager和BroadcastReceiver。
现在谈谈相关部分。 注册广播意图(严重缩写):
public class GroupsListFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
mBroadcastManager = LocalBroadcastManager.getInstance(getActivity());
mBroadCastReceiver = new UpdateGroupsReceiver(this);
IntentFilter iFilter = new IntentFilter(UpdateGroupsReceiver.UPDATE_TIMETABLE_ACTION);
Log.d("GroupsListFragment", "Registering for receiver with intentfilter:[action=" + iFilter.getAction(0) + "]");
mBroadcastManager.registerReceiver(mBroadCastReceiver, iFilter);
}
}
发送广播(再次严重缩写):
public class TimetableListFragment extends Fragment {
public void updateStatus() {
Intent intent = new Intent(UpdateGroupsReceiver.UPDATE_TIMETABLE_ACTION);
mBroadcastManager.sendBroadcast(intent);
Log.d(TAG, "Sending broadcast with intent:[action=" + intent.getAction() + "]");
}
}
问题是我的UpdateGroupsReceiver
从未收到它(onReceive()
永远不会被解雇)。
关于可能是罪魁祸首的任何建议?
答案 0 :(得分:0)
我使用的代码运行良好
@Override
public void onResume() {
super.onResume();
if (myReceiver == null) {
myReceiver = new UpdateGroupsReceiver(this);
IntentFilter filter = new IntentFilter(
UpdateGroupsReceiver.UPDATE_TIMETABLE_ACTION);
registerReceiver(myReceiver, filter);
}
}
public void updateStatus() {
Intent intent = new Intent();
intent.setAction(UpdateGroupsReceiver.UPDATE_TIMETABLE_ACTION);
sendBroadcast(intent);
}
可以在testapp
下的https://github.com/k3b/EzTimeTracker/找到正在运行的最小示例BroadCastTest
。