ListFragment setRetainInstance(true);不起作用

时间:2012-09-06 14:01:00

标签: android android-listfragment

我使用ListFragment

setRetainInstance(true);不起作用,我不知道为什么

savedInstanceState == null

我的消息来源

  public class Fragment_Left extends ListFragment {

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            Log.d(LOG_TAG, "Fragment1 onAttach");
        }

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(LOG_TAG, "Fragment1 onCreate");
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            setRetainInstance(true);

        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            getListAdapter().getItem(position);

        }



         public void onSaveInstanceState(Bundle state) {
                super.onSaveInstanceState(state);
                Log.i(LOG_TAG, "onSaveInstanceState()");


            }


}

    public class Fragment_Left extends ListFragment {
        private ArrayList<Menu_item> menu_list;  .....

     @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            setRetainInstance(true);   
menu_list = new ArrayList<Menu_item>();......

但在我转动屏幕后,menu_list为空,或者我做错了什么?

1 个答案:

答案 0 :(得分:4)

  

如何将数组存储在片段中?

我假设通过“将数组存储在片段中”表示“保留片段在配置更改中使用的数组”。如果是这样的话:

选项#1:将其放入片段的数据成员中,并在该片段上调用setRetainInstance(true)

选项#2:如果数组属于Bundle支持的数据类型,则覆盖onSaveInstanceState(),将数据放入Bundle,并使用其他方法检索该数据在配置更改后创建的新片段实例中(例如,onCreateView())。

选项#3:如果数组确实代表了应用程序的数据模型,请将其保存在新旧片段实例可以访问的中心持久点中,例如数据库或文件。