3

我使用 ListFragment

设置保留实例(真);不起作用,我不知道为什么

已保存实例状态 == 空

我的消息来源

  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 为空,或者我做错了什么?

4

1 回答 1

4

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

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

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

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

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

于 2012-09-06T14:46:30.240 回答