其他分享
首页 > 其他分享> > android-ListFragment setRetainInstance(true);不起作用

android-ListFragment setRetainInstance(true);不起作用

作者:互联网

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

解决方法:

how do I store an array in a fragment?

我假设“在片段中存储阵列”的意思是“保留整个配置更改中片段使用的阵列”.如果是这样的话:

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

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

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

标签:android-listfragment,android
来源: https://codeday.me/bug/20191031/1979412.html