Android:getContext()在Fragment中仅当离开后退按钮时返回null
问题描述:
我有一个片段,其中包含和待定通知内容的ArrayList。Android:getContext()在Fragment中仅当离开后退按钮时返回null
我在onPause()中生成提醒列表,因为我只想在应用程序未在前台运行时显示。
一切工作正常,如果我离开应用程序的HomeScreen按钮,但如果我留在后退按钮,编译器告诉我,我尝试调用空引用getSystemService()。
主要应用工作的的onPause:
@Override
protected void onPause() {
super.onPause();
tasksFragment.buildReminderList();
}
这里从片段的方法,包括:
public void buildReminderList() {
mReminderList = new ArrayList<>();
if (mTaskList != null) {
for (int i = 0; i < mTaskList.size(); i++) {
if (mTaskList.get(i).hasReminder() && mTaskList.get(i).getMillisLeftToday() > 0) {
AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
intent = new Intent(getContext(), AlertReceiver.class);
intent.putExtra("title", mTaskList.get(i).getName());
intent.putExtra("ID", i);
alarmIntent = PendingIntent.getBroadcast(getContext(), i, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, mTaskList.get(i).getReminderHour());
calendar.set(Calendar.MINUTE, mTaskList.get(i).getReminderMinutes());
if (calendar.before(Calendar.getInstance())) {
calendar.add(Calendar.DATE, 1);
}
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60 * 24, alarmIntent);
mReminderList.add(alarmIntent);
}
}
}
}
答
当按下后退按钮时,所述片段不再连接到活性,使getContext()
返回NULL。
您可以检查您的片段仍然是添加到活动中,然后打电话给你getSystemService
像下面
if (isAdded()) {
getContext().getSystemService(Context.ALARM_SERVICE)
}
谢谢你,能避免崩溃。但是,它不再保存提醒列表。任何想法如何我可以解决这个问题? –
您必须使用服务来实现这一点,请阅读[广播接收器](https://developer.android.com/reference/android/content/BroadcastReceiver.html) –
谢谢。我想我也可以将整个buildReminderList方法从片段中移出到主要活动中。 –