如何解决电话系统语言更改时对话框片段崩溃?
我有一个 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
提前致谢
解决方法
我找到了几种我认为适合我的情况的解决方案:
- 检查并检测电话系统设置是否已更改,然后执行某些操作以关闭对话框片段。
- 添加
setRetainInstance(true)
方法内部 onCreateDialog / onStart / setDialogContent (视情况而定)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。