我正在学习在Android中开发应用程序,我对这些文档感到有些困惑。我有一个带有按钮的活动,该按钮最初填充了我从日历类中获得的日期。当用户点击此按钮时,会显示 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 似乎就像活动和 DatePickerDialog 之间显然不必要的中间层一样,在将 DatePickerFragment.onDateSet 上设置的日期传递给主要活动的意义上,要使接口也由主要活动实现并将初始日期传达给片段我必须通过 Bundle 对象来完成,如here所示。
这只是文档的问题,试图成为通才,从片段而不是活动开始(我感觉片段有点像轻量级活动)或者确实存在一些优势或事物我是'我失踪了,所以我不直接从活动中调用对话框?
答案 0 :(得分:2)
由于您是Android的新手并且尚未遇到它,让我打破它:在Android中处理方向更改是一件痛苦的事。简而言之:每次更改方向时都会重新创建活动。所有像Dialogs这样的数据成员都变为空。
为了解决这个问题,有两种方法可以处理方向更改并拥有一个"保留片段"是其中之一。因此,DialogFragment是这个"保留片段"的一种风格。 (不要引用我的话),这不会因方向改变而被破坏。
有关此内容的更多信息:http://developer.android.com/guide/topics/resources/runtime-changes.html