0

重複の可能性:
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;
}

}

4

1 に答える 1

0

私は同じ問題を見てきました。ただし、メソッド setRetainInstance(true) のおかげで、別の方法で instate 状態を保存できます。すべてのクラス データは自動的に保存されます。

@Override
public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
}

編集

アクティビティを宣言するときに、これらのパラメーターも追加してみてください。

    <activity
        android:name="MyActivity"
        android:configChanges="orientation|keyboardHidden|screenSize" />
于 2012-10-15T15:35:09.810 に答える