【发布时间】:2014-03-12 19:12:55
【问题描述】:
我正在学习在 Android 中开发应用程序,我对文档有点困惑。我有一个带有按钮的活动,该按钮最初填充了我从 Calendar 类获得的日期。当用户单击此按钮时,将显示一个 DatePicker 对话框,允许我设置新日期,然后将其写回该按钮的文本并用于进一步处理。
我看到Android Pickers documentation 建议您创建一个 DatePickerFragment 扩展 DialogFragment,就像在此处转载:
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
}
}
我知道对话框上设置的日期将通过 onDateSet 方法提供,该方法是 DatePickerDialog.OnDateSetListener 接口的实现,但我没有做到看看为什么不直接从主要活动中调用 DatePickerDialog ? (就我而言,这正是我最终所做的,而且效果很好......)。
从我的新手的角度来看,实现 DatePickerFragment 似乎是在 Activity 和 DatePickerDialog 之间显然不必要的中间层,从某种意义上说,将 DatePickerFragment.onDateSet 上设置的日期传达给主要活动需要接口也由主要活动实现并将初始日期传达给我必须通过 Bundle 对象来完成的片段,如 here 所示。
这只是试图成为通才并从片段而不是活动开始的文档问题(我觉得片段有点像轻量级活动)还是真的有一些优势或我错过的东西所以我不直接从活动中调用对话框?
【问题讨论】:
-
DialogFragment 可帮助您处理方向更改,这对于常规对话框来说是个难题。使用常规对话框,您需要在 onStop 中将其关闭,然后在 onStart 中您需要检查是否需要显示它(我们是在方向更改还是只是常规 onStart 没有显示对话框?) DialogFragment 解决了所有这些问题。
-
VM 所说的,除了使用片段为您提供跨设备灵活性的想法之外。
-
嗯。这似乎确实是一个很好的理由。他们应该在文档中指出类似的东西..这样可以避免一些迷路的新手遭受痛苦..呵呵
-
事实上,他们确实指出:(在对话框文档中):这些类定义了对话框的样式和结构,但您应该使用 DialogFragment 作为对话框的容器。 DialogFragment 类提供了创建对话框和管理其外观所需的所有控件,而不是调用 Dialog 对象上的方法。”。阅读内容太多......有时事情会被忽视。
标签: java android android-fragments android-dialogfragment