Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Обзор
Иногда пользователь должен вводить данные в приложение Android. Для этого платформа Android предоставляет DatePicker мини-приложение и платформу DatePickerDialog . Это DatePicker позволяет пользователям выбирать год, месяц и день в согласованном интерфейсе между устройствами и приложениями. Это DatePickerDialog вспомогательный класс, который инкапсулирует DatePicker его в диалоговом окне.
Современные приложения Android должны отображаться DatePickerDialog в DialogFragment. Это позволит приложению отображать DatePicker в виде всплывающего диалогового окна или внедренного в действие. Кроме того, DialogFragment будет управлять жизненным циклом и отображением диалогового окна, уменьшая объем кода, который необходимо реализовать.
В этом руководстве показано, как использовать оболочку DatePickerDialog, завернутую DialogFragmentв . Пример приложения будет отображаться DatePickerDialog в модальном диалоговом окне, когда пользователь нажимает кнопку в действии. При установке пользователем TextView даты изменится с выбранной датой.
Требования
Пример приложения для этого руководства предназначен для Android 4.1 (уровень API 16) или выше, но применимо к Android 3.0 (уровень API 11 или выше). Для поддержки более старых версий Android можно добавить библиотеку поддержки Android версии 4 в проект и некоторые изменения кода.
Использование DatePicker
Этот пример будет расширен DialogFragment. Подкласс будет размещать и отображать DatePickerDialog:

Когда пользователь выбирает дату и нажимает кнопку "ОК ", DatePickerDialog вызывается метод IOnDateSetListener.OnDateSet.
Этот интерфейс реализуется размещением DialogFragment. Если пользователь нажимает кнопку "Отмена ", фрагмент и диалоговое окно будут уволены.
Существует несколько способов DialogFragment возврата выбранной даты в действие размещения:
Вызов метода или задание свойства. Действие может предоставить свойство или метод специально для задания этого значения.
Вызов события. Может
DialogFragmentопределить событие, которое будет вызываться приOnDateSetвызове.Используйте значение
Action—DialogFragmentможет вызыватьсяAction<DateTime>для отображения даты в действии. Действие обеспечитAction<DateTimeсоздание экземпляраDialogFragmentобъекта . В этом примере используется третий метод и требуется, чтобы действие предоставлялосьAction<DateTime>в .DialogFragment
Расширение диалогового окна
Первым шагом в отображении является DatePickerDialog подкласс DialogFragment и реализация IOnDateSetListener интерфейса:
public class DatePickerFragment : DialogFragment,
DatePickerDialog.IOnDateSetListener
{
// TAG can be any string of your choice.
public static readonly string TAG = "X:" + typeof (DatePickerFragment).Name.ToUpper();
// Initialize this value to prevent NullReferenceExceptions.
Action<DateTime> _dateSelectedHandler = delegate { };
public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
{
DatePickerFragment frag = new DatePickerFragment();
frag._dateSelectedHandler = onDateSelected;
return frag;
}
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
DateTime currently = DateTime.Now;
DatePickerDialog dialog = new DatePickerDialog(Activity,
this,
currently.Year,
currently.Month - 1,
currently.Day);
return dialog;
}
public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
// Note: monthOfYear is a value between 0 and 11, not 1 and 12!
DateTime selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
Log.Debug(TAG, selectedDate.ToLongDateString());
_dateSelectedHandler(selectedDate);
}
}
Метод NewInstance вызывается для создания экземпляра нового DatePickerFragment. Этот метод принимает Action<DateTime> вызов, который будет вызываться, когда пользователь нажимает кнопку "ОК " в элементе DatePickerDialog.
При отображении фрагмента Android вызовет метод OnCreateDialog. Этот метод создаст новый DatePickerDialog объект и инициализирует его с текущей датой и объектом обратного вызова (который является текущим экземпляром объекта DatePickerFragment).
Примечание.
Помните, что значение месяца, когда IOnDateSetListener.OnDateSet вызывается, находится в диапазоне от 0 до 11, а не от 1 до 12. День месяца будет находиться в диапазоне от 1 до 31 (в зависимости от выбранного месяца).
Отображение datePickerFragment
Теперь, когда DialogFragment он был реализован, в этом разделе рассматривается использование фрагмента в действии. В примере приложения, сопровождающего это руководство, действие создаст экземпляр DialogFragment с помощью NewInstance метода фабрики, а затем отобразит его вызов DialogFragment.Show. В рамках создания экземпляра DialogFragmentдействие передает значение Action<DateTime>, которое будет отображать дату в TextView размещенном действием:
[Activity(Label = "@string/app_name", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
TextView _dateDisplay;
Button _dateSelectButton;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
_dateDisplay = FindViewById<TextView>(Resource.Id.date_display);
_dateSelectButton = FindViewById<Button>(Resource.Id.date_select_button);
_dateSelectButton.Click += DateSelect_OnClick;
}
void DateSelect_OnClick(object sender, EventArgs eventArgs)
{
DatePickerFragment frag = DatePickerFragment.NewInstance(delegate(DateTime time)
{
_dateDisplay.Text = time.ToLongDateString();
});
frag.Show(FragmentManager, DatePickerFragment.TAG);
}
}
Итоги
В этом примере рассматривается отображение DatePicker мини-приложения в виде модального диалогового окна всплывающего окна в рамках действия Android. Он предоставил пример реализации DialogFragment и обсудил IOnDateSetListener интерфейс. В этом примере также показано, как DialogFragment может взаимодействовать с действием узла для отображения выбранной даты.
