我正在制作一个主要细节应用程序,我正在观察一些奇怪的行为,我无法解释/找到答案。
因此,我的主片段只是一个ListView,当您单击某个项目时,它会打开详细信息页面。因此,当您在详细信息页面上时,可以按后退按钮,它将返回到主片段,没有错误。
如果您正在进行细节更改,然后进行方向更改然后再按,则仍然不会发生错误。
但是当你在详细信息页面上,然后进行方向更改,然后进行方向更改(所以肖像 - >横向 - >肖像)时,我在尝试时会得到一个空指针异常恢复ListView。
以下是有问题的代码:
if (savedInstanceState == null) {
posts = new ArrayList<Post>();
loading = true;
refreshData();
} else {
loading = false;
posts = savedInstanceState.getParcelableArrayList("posts");
adapter = new ListviewAdapterPost(getActivity(), R.layout.cell_layout_post,
posts);
//This line is the one that throws the null pointer.
listview.setAdapter(adapter);
}
我做了一个检查,并且在两个方向更改后,帖子ArrayList为null,但不是仅仅一个。此代码发生在我的主片段中的onCreateView方法中。
如果您需要任何其他代码,请告诉我们!
答案 0 :(得分:2)
你会使用android:configChanges =“orientation”来避免在方向发生变化时重新调整你的活动。
你可以保存&amp;通过手动创建Fragment实例来检索您的片段实例。
创建newInstance,如:
public static MasterFragment newInstance() {
MasterFragment mf = new MasterFragment ();
Bundle args = new Bundle();
if(posts != null && posts.length > 0)
args.putSerializable("posts", posts);
mf.setArguments(args);
return mf;
}
并在您的活动中像newInstance一样创建片段
MasterFragment mf = MasterFragment.newInstance();
*
*transaction
*