【发布时间】:2021-07-12 03:24:03
【问题描述】:
我有一个 DialogFragment 来显示选项列表。因此,我尝试对我的应用程序进行多项测试。我在电话设置中更改电话系统语言时发现了一个问题,而事先 DialogFragment 在我的应用程序中打开,然后返回到我的应用程序。它导致 DialogFragment 上出现空指针异常。
基本上,repro 是这样的:
- 打开活动
- 活动将在一些用户操作后打开 DialogFragment
- 用户退出应用程序并进入手机设置
- 用户更改手机系统语言,然后返回应用程序
- DialogFragment 仍然出现,但格式不正确。
- 用户按下后退按钮,应用会自动崩溃。
我一直在尝试几个示例和解决方案,但在上述重现后应用程序仍然会崩溃。
当用户更改电话系统语言时,我应该怎么做才能告诉 Activity 关闭 DialogFragment?我需要放标志吗?但是如何?
这是日志:
java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.MainDialogFragment$MainDialogListener.onDestroyMainDialogFragment()' on a null object reference
at com.example.MainDialogFragment.onDestroy(MainDialogFragment.java:152)
更改手机系统语言并返回应用程序后,对话框片段仍然出现,然后用户按下返回按钮:
我的第 152 行是:
@Override
public void onDestroy() {
myMainListener.onDestroyMainDialogFragment();
myMainListener = null;
super.onDestroy();
}
这是我的完整代码: https://codeshare.io/DZZRWO
提前致谢
【问题讨论】:
-
那么为什么您的 DialogFragment 没有以“正确的格式”出现。为什么当你按下返回按钮时你的应用程序会崩溃?您的首要任务应该是解决这些问题,但您没有包含有关 DialogFragment 代码或您遇到的崩溃的堆栈跟踪的详细信息。
-
@ianhanniballake 我已经编辑了我的描述,请看一下,谢谢
-
那么你在哪里填充你的选项列表(为什么在进程死亡和重新创建后该列表不存在)?你是如何设置你的
myMainListener的(为什么在进程死亡和重新创建之后设置不正确)?您是否使用专门用于测试这些案例的“不保留活动”开发人员选项进行了任何测试? -
@ianhanniballake 我在创建片段和片段已经处于 onDestroy 阶段时都设置了一个侦听器。我认为流程变成了这样:活动打开-> OnCreateDialog-> 出现对话框-> 更改手机语言设置-> 以前的初始化消失-> 重新创建片段-> 但变为空。请看我的完整代码:codeshare.io/DZZRWO
标签: java android android-dialogfragment