0

インスタンス化するDialogFragment(android.support.v4.app.DialogFragment)があります:

public Dialog onCreateDialog(Bundle savedInstanceState) {
  ...
  AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
  LayoutInflater inflater = getActivity().getLayoutInflater();  
  View v = inflater.inflate(R.layout.selector, null);
  builder.setView(v);
  ...
}

RetainInstance を設定していないので、デフォルトでは false です。

そのダイアログにはいくつかのチェックボックスがあり、このダイアログへの呼び出しの間にそれらの状態を記憶したいと思います。ダイアログにボタンを配置しておらず、ユーザーがダイアログの外側をクリックして閉じる必要があります。

画面の向きが変わると、すべて正常に動作します。ダイアログは別の向きで再作成され、ユーザーの選択は保持されます。メソッド onSaveInstanceState が呼び出されるため、これは自動的に発生するようです。

ダイアログが閉じられたときに同じ魔法の恩恵を受けたいのですが、ユーザーがダイアログの外側をクリックしたときに onSaveInstanceState が呼び出されないことに気付きました。

私の本能は、onDismiss 内から onSaveInstanceState への呼び出しを強制することです (ダイアログが閉じられたときに呼び出されます)。しかし、onSaveInstanceState には引数として Bundle が必要であり、渡すのに適切なものが見つかりません。getArguments() を呼び出してみましたが、null が返されます。

では、onSaveInstanceState() に渡すことができる引数はありますか? また、通話間のダイアログの状態を保持する他の簡単な方法にもオープンです。

ありがとう

4

1 に答える 1

1

よくわかりませんが、チェックボックスごとに変数をOnSaveInstanceState作成できます。チェックボックスごとに、それらのブール変数にチェックボックスの状態を保存できます。BooleanOnCheckedChangeListener

また

SharedPreferencesまた、チェックボックスの状態を保存するために使用することもできます

警告ダイアログ内のチェックボックスにアクセスするには、使用する必要があります

CheckBox cbox = (CheckBox) view.findViewById(R.id._cbox);
                           ^^^^^

それが役に立てば幸い...

于 2013-03-22T12:19:20.533 に答える