Android: fragment 中的 getContext() 仅在离开后退按钮时返回 null

标签 android android-context

我有一个 fragment ,其中包含待处理通知 Intent 的 ArrayList。

我在 onPause() 中构建提醒列表,因为我只希望在 App 未在前台运行时显示。

如果我将应用程序留在主屏幕按钮上,一切正常,但如果我离开后退按钮,编译器告诉我我尝试在空引用上调用 getSystemService()。

Main Activitie 的 onPause:

@Override
protected void onPause() {
    super.onPause();
    tasksFragment.buildReminderList();
}

这里是 fragment 中的方法:

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);
            }
        }
    }
}

最佳答案

按下后退按钮时, fragment 不再附加到 Activity ,因此 getContext() 返回 null。

您可以检查您的 fragment 是否仍被添加到 Activity 中,然后调用您的 getSystemService,如下所示

if (isAdded()) {
   getContext().getSystemService(Context.ALARM_SERVICE)
}

关于Android: fragment 中的 getContext() 仅在离开后退按钮时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45911776/

相关文章:

java - 如何在java中使用动态数据创建多个数组列表

android - 如何在Xamarin.Android中创建实时数据?

Android - 使用上下文的最佳方式

java - 多个 XML 文件的 SharedPreferences 管理器类

java - 如何在回收器 View 适配器中获取上下文

Android:ProgressDialog 未显示在适配器类中

android - 如何在edittext中设置不可编辑的文本

android - Azure 流式传输仅在 Android 应用程序内缓慢

android - 如何正确调用上下文来启动 Activity

java - 如何将不可序列化的对象存储到 android 中的 sqlite?或者你也可以建议任何其他方式来存储不可序列化的 arralylist objest