【发布时间】:2015-02-09 16:27:39
【问题描述】:
我正在为列表视图创建一个数组适配器, 一切正常,我有 2 个片段,以及在这 2 个片段之间变化的操作栏顶部的 2 个按钮。 我的问题是,如果我在这些片段之间移动得太快,当我打开 fragOne,切换到 fragTwo,然后快速返回 fragOne 时,我会崩溃。。 fragOne 从 getActivity 上下文中抛出 NPE。
那是崩溃的那一行:
adapter = new MainFragmentDocumentAdapter(getActivity(), docsList, DocumentsFragment.this, page);
日志报告:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.bbb.app, PID: 17438
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:104)
at com.bbb.app.UI.adapters.MainFragmentDocumentAdapter.<init>(MainFragmentDocumentAdapter.java:51)
知道如何解决这个问题吗?
【问题讨论】:
-
你会因为片段生命周期问题而崩溃,有时会导致 getActivity() 为空。
-
getApplicationContext() 不是最优的,因为它不会在适配器中设置任何样式。 ContextThemeWrapper 应用程序上下文与应用程序主题或使适配器成为全局对象,以便在片段恢复时不会尝试实例化另一个适配器并且您的应用程序不会崩溃。
-
jvrodrigues 谢谢你的回答,你能解释一下吗?完全没看懂,谢谢!
-
用 getApplicationContext() 更改 getActivity() 我喜欢programming by permutation ...问题出在过早的
getActivity()调用中...好像你是从“constructor”(构造函数中的 fx 或作为字段初始化器)......类似的问题被问了很多次 -
你在哪个方法中创建了适配器?如果片段在标签中,为什么每次切换标签时都需要重新创建它们?
标签: java android android-fragments