フラグメントから、ダイアログを呼び出します
private void showDateDialog(){
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = new DatePickerDialogFragment((Fragment)this,localCalendar);
newFragment.show(ft, "dialog");
}
次に、カスタム ダイアログで timesetlistener を呼び出します
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getActivity());
final View v = inflater.inflate(R.layout.time_dialog, null);
timePicker=(TimePicker)v.findViewById(R.id.timePicker1);
timePicker.setIs24HourView(true);
if (data!=null) {
timePicker.setCurrentHour(data.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(data.get(Calendar.MINUTE));
}
timePicker.setScaleX(2);
timePicker.setScaleY(2);
return new TimePickerDialog.Builder(getActivity())
.setTitle(R.string.timeDialog1)
.setView(v)
.setCancelable(true)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//validation code
OnTimeSetListener otsl=(OnTimeSetListener)mFragment;
otsl.onTimeSet(timePicker, timePicker.getCurrentHour(), timePicker.getCurrentMinute());
}
})
.setNegativeButton(R.string.annulla, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create();
}
フラグメントでは、OnTimeSetListener を実装して値を取得します
public void onTimeSet(TimePicker view, int hour, int minute) {
localCalendar.set(Calendar.HOUR_OF_DAY, hour);
localCalendar.set(Calendar.MINUTE, minute);
updateTime(hour,minute);
}
これは正常に機能しています。しかし、別のカスタム ダイアログで文字列を返したいのですが、実装するリスナーがわかりません。「onDismiss」を試しましたが、パラメーターを渡すことができません。OnValueChangeListener を試しましたが、パラメーターには 2 つの整数があるため (文字列が必要です!)。これは正しい方法ですか?つまり、リスナーを使用することです。
良いことは、onDateChange を実装する任意のフラグメントから、ダイアログを起動して値を取得できることです。