私は2つのフラグメントを持っています。
最初のフラグメントには、フラグメントのビューに静的なコンテナー (LinearLayout) があります。このコンテナでは、いくつかのビューのインフレを行います。
2 番目のフラグメントに変更しましたが、最初のフラグメントに戻ると、膨張したビューが消えました。
コンテナの状態を保存するにはどうすればよいですか? 誰かが私に例を与えることができますか?助けてくれてありがとう
私は2つのフラグメントを持っています。
最初のフラグメントには、フラグメントのビューに静的なコンテナー (LinearLayout) があります。このコンテナでは、いくつかのビューのインフレを行います。
2 番目のフラグメントに変更しましたが、最初のフラグメントに戻ると、膨張したビューが消えました。
コンテナの状態を保存するにはどうすればよいですか? 誰かが私に例を与えることができますか?助けてくれてありがとう
戻ったときに 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;
}
問題はセーブインスタンスにあります。フラグメントはフラグメントに属するビューの状態を保存しますが、インフレの結果である他のビューは消えます。
コンテナ内の状態(フラグメントの変更時)を保存する方法がわかりません。それは数回変更されます(動的)