多个方向更改后,savedInstanceState中的值变为null

时间:2014-09-14 19:34:41

标签: android android-fragments fragment android-fragmentactivity

我正在制作一个主要细节应用程序,我正在观察一些奇怪的行为,我无法解释/找到答案。

因此,我的主片段只是一个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方法中。

如果您需要任何其他代码,请告诉我们!

1 个答案:

答案 0 :(得分:2)

  1. 你会使用android:configChanges =“orientation”来避免在方向发生变化时重新调整你的活动。

  2. 你可以保存&amp;通过手动创建Fragment实例来检索您的片段实例。

  3. 片段中的

    创建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
    *