0

私は2つのフラグメントを持っています。

最初のフラグメントには、フラグメントのビューに静的なコンテナー (LinearLayout) があります。このコンテナでは、いくつかのビューのインフレを行います。

2 番目のフラグメントに変更しましたが、最初のフラグメントに戻ると、膨張したビューが消えました。

コンテナの状態を保存するにはどうすればよいですか? 誰かが私に例を与えることができますか?助けてくれてありがとう

ここに画像の説明を入力

4

2 に答える 2

0

戻ったときに onCreateView が再度呼び出され、フラグメントが再作成されています。1 つの解決策は、フラグメントの状態を onSaveInstanceState に保存し、onCreateView で再読み込みすることです。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ..
    if (savedInstanceState != null) {
       // reload state
    }
    ..
}

public void onSaveInstanceState (Bundle outState) {
    // save dynamic state in outState
}

編集:

実際のビューを維持したい場合は、これが機能することがわかりました。

private View mLayout;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    if (mLayout == null) {
      // this is the first time onCreateView has been called
      mLayout = inflater.inflate(..);
    } else {
      // remove previous parent
      ViewParent parent = mLayout.getParent();
      if (parent != null)
        ((ViewGroup) parent).removeView(mLayout);
    }
    return mLayout;
}
于 2012-11-27T15:55:19.743 に答える
0

問題はセーブインスタンスにあります。フラグメントはフラグメントに属するビューの状態を保存しますが、インフレの結果である他のビューは消えます。

コンテナ内の状態(フラグメントの変更時)を保存する方法がわかりません。それは数回変更されます(動的)

于 2012-11-27T15:52:50.170 に答える