当我尝试创建一个片段(活动的单个孩子)时,我的第一个应用程序崩溃了。它是自定义' ListViewAdapter'上的NullPointerException,存储为成员变量。通过测试,我相信我正确地处理了我的片段的启动和停止,但我怀疑我没有处理onDestroy
并且正确地分割娱乐,因为它发生在我将应用程序打开一段时间并且做了其他事情之后。
但是,我的应用处理方向更改which I thought included full recreation。所以,我的主要问题是:
onSavedInstanceState
执行我的适配器的任何自定义处理? 以下是崩溃的代码:
// in my fragment's onCreateView()
if (savedInstanceState != null) {
myListViewAdapter.clear(); //this throws NullPointerException
} else {
courseId = ((Activity_Course) this.getActivity()).courseId;
}
在这种情况下,我可以跳过清除适配器,如果它是null,但我想更好地理解应该如何处理这些事情。谢谢!
答案 0 :(得分:1)
我怀疑我没有正确处理onDestroy和片段娱乐,因为它发生在我将应用程序打开一段时间之后发生了其他事情
如果我不得不猜测,你的进程在后台终止了。您用于返回应用程序的路径(例如,最近任务列表)不涉及重新初始化此数据成员。
如果方向更改重新创建活动,它是否也不会重新创建其子片段?
除非保留片段(setRetainInstance(true)
),否则它将重新创建片段。在这种情况下,现有片段将与旧活动分离并附加到新活动。
如果是这样,为什么我在更改方向时没有得到NullPointerException,因为我没有通过onSavedInstanceState对我的适配器执行任何自定义处理?
鉴于您目前提供的信息,我无法回答这个问题。
如何在出于测试目的时引发导致崩溃的行为?
如果我的猜测是正确的,并且这是因为您的流程已终止而导致的,您可以通过DDMS手动终止您的流程。
答案 1 :(得分:0)
我认为你还没有初步化你想要用于列表视图的arraylist或列表。也不要忘记setAdapter和NotifyDataSetChanged。