重複の可能性:
AndroidフラグメントsetRetainInstance(true)が機能しない(Androidサポートライブラリ)
簡単なテストプロジェクトを作成しましたが、ライフサイクルメソッドonCreate、onCreateView、onActivityCreatedでsavedInstanceState=nullを常に受け取る理由がわかりません。画面の向きを変更し、ログを確認しましたが、状態が保存されていません。私の間違いはどこにあるのか教えてください。ありがとう。フラグメントクラスのコードは次のとおりです。
public class TestFragment extends Fragment {
private String state = "1";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (savedInstanceState != null) {
//never works
state = savedInstanceState.getString("state");
}
//always prints 1
Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show();
return inflater.inflate(R.layout.fragment_layout, container, false);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("state", "2");
Log.e("", "saved 2");
}
}
編集
setRetainInstanceを使用しようとすると、結果が再び表示されません(((btn1を使用して状態を2に変更しますが、方向を変更した後、btn2を押すと1が表示されます。ヘルプしてください(
パブリッククラスTestFragmentはFragmentを拡張します{
@Override
public void onCreate(Bundle savedInstanceState) {
setRetainInstance(true);
super.onCreate(savedInstanceState);
}
private String state = "1";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
//button for changing state
((Button)view.findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
state = "2";
}
});
//button for showing state
((Button)view.findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show();
}
});
return view;
}
}