私は、DatePickerDialogを作成するDialogFragmentを持っています。私はnewInstance
と呼ばれる静的メソッドを使用して、デフォルトの空のコンストラクタを使用するために初期値を設定しています。しかし、どのようにリスナーを設定する必要がありますか?画面の回転後、「完了」ボタンをクリックすると、リスナーは存在しないため何もしません。DialogFragment - 画面回転後のリスナーを保持する
public class DatePickerFragment extends DialogFragment {
public static final String ARG_YEAR = "year";
public static final String ARG_MONTH = "month";
public static final String ARG_DAY = "day";
private OnDateSetListener listener_;
public static DatePickerFragment newInstance(OnDateSetListener listener, int year, int month, int day) {
final DatePickerFragment date_picker = new DatePickerFragment();
date_picker.setListener(listener);
final Bundle arguments = new Bundle();
arguments.putInt(ARG_YEAR, year);
arguments.putInt(ARG_MONTH, month);
arguments.putInt(ARG_DAY, day);
date_picker.setArguments(arguments);
return date_picker;
}
private void setListener(OnDateSetListener listener) {
listener_ = listener;
}
@Override
public Dialog onCreateDialog(Bundle saved_instance_state) {
final Bundle arguments = getArguments();
final int year = arguments.getInt(ARG_YEAR);
final int month = arguments.getInt(ARG_MONTH);
final int day = arguments.getInt(ARG_DAY);
return new DatePickerDialog(getActivity(), listener_, year, month, day);
}
}
優れたソリューションを文書化されています!それは完璧に働いた。ありがとう、@ Luksprog。 –
正しい解決策:) –
+1また、明確にするために、重要なことは、ダイアログフラグメントのタグを使用してリスナーを再適用することです。このタグは、ダイアログの 'show'メソッドの第2引数に指定されています。 ' ' DatePickerFragment DPF =(DatePickerFragment)getFragmentManager() .findFragmentByTag(「theTag; – rekaszeru