从片段中调用对话框
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的片段,我都可以启动对话框并检索值。
答案 0 :(得分:0)
好的,我自己回答:我无法弄清楚如何做到这一点,所以我使用了这个解决方案: 我为每个对话框构建一个不同的类,它解析调用片段并调用其中的方法。这不是最好的解决方案,但它正在运作