我想做的是当用户onbackpress那个新活动时,我想更新那个片段中的报警列表。但在我尝试使用广播接收器时,它没有收到任何东西。如何解决?
报警活动中的
@Override
public void onBackPressed() {
Log.d("test1","test R1");
Intent intent = new Intent("on_alarm_remove");
LocalBroadcastManager.getInstance(ctx).sendBroadcast(intent);
super.onBackPressed();
}
警报选项卡中的片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ctx = getActivity();
intentFilter = new IntentFilter("on_alarm_remove");
LocalBroadcastManager.getInstance(ctx).registerReceiver(mMessageReceiver, intentFilter);
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("test1","test R");
db.removeRecord(db.getFirstAlarm().alarm_id);
reloadFragment();
}
};
@Override
public void onPause() {
if (mMessageReceiver != null)
LocalBroadcastManager.getInstance(ctx).unregisterReceiver(mMessageReceiver);
super.onPause();
}
在清单
<receiver android:name=".reminder.ReminderFrag$mMessageReceiver" />
它没有崩溃,但没有发生任何事情,在日志“测试R1”已经运行,但“测试R”没有。再次感谢您的帮助
更新
我找到问题的根本原因,因为我在片段顶部打开一个新活动,它会在触发警报时调用onPause并取消注册监听器。
我如何区分警报触发器何时以及用户何时更改为其他选项卡/离开应用程序?我应该使用ondetach吗?
UPDATE2:
另外,我尝试删除onPause中的取消注册 但它崩溃并显示
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState