Android 날짜 선택기
개요
사용자가 Android 애플리케이션에 데이터를 입력해야 하는 경우가 있습니다. 이를 지원하기 위해 Android 프레임워크는 DatePicker
위젯과 DatePickerDialog
. 이를 DatePicker
통해 사용자는 디바이스 및 애플리케이션 간에 일관된 인터페이스에서 연도, 월 및 일을 선택할 수 있습니다. DatePickerDialog
대화 상자에서 캡슐화하는 DatePicker
도우미 클래스입니다.
최신 Android 애플리케이션은 에 DialogFragment
표시 DatePickerDialog
되어야 합니다. 이렇게 하면 애플리케이션에서 DatePicker를 팝업 대화 상자로 표시하거나 활동에 포함할 수 있습니다. 또한 DialogFragment
대화 상자의 수명 주기 및 표시를 관리하여 구현해야 하는 코드의 양을 줄입니다.
이 가이드에서는 로 래핑된 DialogFragment
을 DatePickerDialog
사용하는 방법을 보여 줍니다. 샘플 애플리케이션은 사용자가 활동에서 단추를 클릭할 때 모달 대화 상자로 표시됩니다 DatePickerDialog
. 사용자가 TextView
날짜를 설정하면 선택한 날짜로 업데이트됩니다.
요구 사항
이 가이드의 샘플 애플리케이션은 Android 4.1(API 수준 16) 이상을 대상으로 하지만 Android 3.0(API 수준 11 이상)에 적용할 수 있습니다. Android 지원 라이브러리 v4를 프로젝트에 추가하고 일부 코드를 변경하여 이전 버전의 Android를 지원할 수 있습니다.
DatePicker 사용
이 샘플은 확장 DialogFragment
됩니다. 하위 클래스는 다음을 호스트하고 표시합니다 DatePickerDialog
.
사용자가 날짜를 선택하고 확인 단추를 클릭하면 메서드IOnDateSetListener.OnDateSet
를 DatePickerDialog
호출합니다.
이 인터페이스는 호스팅 DialogFragment
에 의해 구현됩니다. 사용자가 취소 단추를 클릭하면 조각화와 대화 상자가 해제됩니다.
선택한 날짜를 호스팅 활동으로 반환할 수 있는 방법에는 여러 가지 DialogFragment
가 있습니다.
메서드를 호출하거나 속성을 설정합니다. 활동은 이 값을 설정하기 위해 특별히 속성 또는 메서드를 제공할 수 있습니다.
이벤트 발생 –
DialogFragment
호출될 때OnDateSet
발생할 이벤트를 정의할 수 있습니다.Action
사용 –DialogFragment
활동에서 날짜를 표시하기 위해 호출Action<DateTime>
할 수 있습니다. 활동은 인스턴스화DialogFragment
할Action<DateTime
때를 제공합니다. 이 샘플은 세 번째 기술을 사용하며, 활동이 에 제공Action<DateTime>
되어야 합니다DialogFragment
.
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
메서드를 인스턴스화합니다. 이 메서드는 사용자가 에서 확인 단추를 클릭할 때 호출되는 메서드를 DatePickerDialog
사용합니다Action<DateTime>
.
조각이 표시될 때 Android는 메서드 OnCreateDialog
를 호출합니다. 이 메서드는 새 DatePickerDialog
개체를 만들고 현재 날짜 및 콜백 개체(현재 인스턴스 DatePickerFragment
)를 사용하여 초기화합니다.
참고 항목
호출되는 월 IOnDateSetListener.OnDateSet
의 값은 1에서 12가 아니라 0에서 11까지의 범위에 있습니다. 해당 월의 날짜는 선택한 월에 따라 1에서 31까지입니다.
DatePickerFragment 표시
DialogFragment
이제 구현되었으므로 이 섹션에서는 작업에서 조각을 사용하는 방법을 살펴봅니다. 이 가이드와 함께 제공되는 샘플 앱에서 작업은 using 팩터리 메서드를 DialogFragment
NewInstance
인스턴스화한 다음 호출을 표시합니다 DialogFragment.Show
. 활동을 인스턴스화하는 DialogFragment
과정의 일부로 활동에서 호스팅되는 날짜 TextView
가 표시되는 작업을 전달합니다Action<DateTime>
.
[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);
}
}
요약
이 샘플에서는 Android 활동의 일부로 위젯을 팝업 모달 대화 상자로 표시하는 DatePicker
방법을 설명했습니다. 샘플 DialogFragment 구현을 제공하고 인터페이스에 대해 IOnDateSetListener
설명했습니다. 또한 이 샘플에서는 DialogFragment가 호스트 활동과 상호 작용하여 선택한 날짜를 표시하는 방법을 보여 줬습니다.