【问题标题】:Storing fragments to deal with screen rotation changes存储片段以处理屏幕旋转变化
【发布时间】:2013-02-19 01:33:38
【问题描述】:

我有一个由一个活动和 3 个片段组成的应用程序。该活动创建一个菜单,其中包含创建适当片段的按钮。我的代码在没有屏幕旋转的情况下完美运行,但是当我旋转屏幕时它会中断。

我的第一次尝试在创建片段时没有包含setRetainInstance(true) 调用。我发现的问题是,在两次替换片段后(一个片段保留在后堆栈上),如果我旋转屏幕,我会在当前未显示的片段中得到一个空指针异常。 编辑:请注意,空指针异常在下面显示的setOnItemClickListener 调用中。 lvonCreateView() 方法中声明。

我的第二次尝试,我在创建片段时包含了一个setRetainInstance(true) 调用。这解决了第一个问题。但是,我的片段之一是ListFragment,当我旋转屏幕时,OnItemClickListener 似乎不再设置。这是我设置监听器的代码:

ListAdapter adapter = new SimpleAdapter(getActivity(),
        gameslist, R.layout.list_object,
        new String[] { TAG_ID, TAG_NAME, TAG_LOCATION, TAG_CREATED },
        new int[] { R.id.id, R.id.name, R.id.location, R.id.created_date });
setListAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0,
                View arg1, int position, long arg3) {
            // ...
        }
});

对这个问题有什么想法或解决方案吗?我对如何使用 Fragment 进行设计的理解完全没有了吗?

感谢您的帮助!

编辑:另外,只是为了我的理解,在代码中的哪里重新创建了片段?它们不在我活动的oncreate() 功能中。谢谢!

想通了!我在 onCreate() 函数中调用 AsyncTask,该函数在屏幕旋转时被调用。但是,我在 onCreateView() 函数中声明了 lv,在创建视图之前不会调用该函数。空指针异常!

【问题讨论】:

  • 你的片段中实现了 onCreate(...) 和 onResume() 和 onCreateView(...) 吗?适配器代码在这三个中的哪一个?
  • 我已经实现了 onCreate 和 onCreateView。适配器代码位于 onCreate 调用的 AsyncTask 中。谢谢。
  • 最后一件事——适配器代码在 OnPostExecute 方法中,对吧?
  • 是的。感谢您的帮助!

标签: android fragment screen-rotation


【解决方案1】:

你的片段中实现了 onCreate(...) 和 onResume() 和 onCreateView(...) 吗?

适配器代码在这三个中的哪一个?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2021-11-16
    • 2012-10-04
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多