3

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がnullになりましたか、それとも何か間違ったことをしましたか?

4

1 に答える 1

4

配列をフラグメントに格納するにはどうすればよいですか?

「配列をフラグメントに格納する」とは、「構成の変更後もフラグメントで使用される配列を保持する」ことを意味すると想定しています。もしそうなら:

オプション #1: フラグメントのデータ メンバーに入れ、そのフラグメントを呼び出しますsetRetainInstance(true)

オプション #2: 配列が でサポートされているデータ型である場合はBundle、オーバーライドonSaveInstanceState()し、データを に置き、Bundle構成変更後に作成された新しいフラグメント インスタンスの他のメソッドでそのデータを取得します (例: onCreateView())。

オプション #3: 配列が実際にアプリのデータ モデルを表している場合は、データベースやファイルなど、古いフラグメント インスタンスと新しいフラグメント インスタンスがアクセスできる中央の永続的な場所に配列を保持します。

于 2012-09-06T14:46:30.240 に答える