Aracılığıyla paylaş


Android Tarih Seçici

Genel bakış

Bir kullanıcının Android uygulamasına veri girişi yapması gereken durumlar vardır. Bu konuda yardımcı olmak için Android çerçevesi pencere öğesini ve DatePickerDialog öğesini sağlarDatePicker. , DatePicker kullanıcıların cihazlar ve uygulamalar arasında tutarlı bir arabirimde yıl, ay ve günü seçmesine olanak tanır. DatePickerDialog, bir iletişim kutusunda öğesini DatePicker kapsülleyen bir yardımcı sınıfıdır.

Modern Android uygulamalarının içinde DialogFragmentöğesini görüntülemesi DatePickerDialog gerekir. Bu, bir uygulamanın DatePicker'ı bir açılan iletişim kutusu olarak görüntülemesine veya bir Etkinliğe katıştırılmış olmasına olanak sağlar. Buna ek olarak, DialogFragment iletişim kutusunun yaşam döngüsünü ve görüntülenmesini yöneterek uygulanması gereken kod miktarını azaltır.

Bu kılavuz, içinde DialogFragmentsarmalanmış olarak nasıl kullanılacağını DatePickerDialoggösterir. Kullanıcı etkinlik üzerindeki bir düğmeye DatePickerDialog tıkladığında örnek uygulama bunu kalıcı bir iletişim kutusu olarak görüntüler. Tarih kullanıcı tarafından ayarlandığında , TextView seçilen tarihle güncelleştirilir.

Screenshot of Pick Date button followed by Date Picker dialog

Gereksinimler

Bu kılavuz için örnek uygulama Android 4.1 (API düzeyi 16) veya üzerini hedefler, ancak Android 3.0 (API düzeyi 11 veya üzeri) için geçerlidir. Android Destek Kitaplığı v4'ün projeye eklenmesi ve bazı kod değişiklikleri ile Android'in eski sürümlerini desteklemek mümkündür.

DatePicker kullanma

Bu örnek genişletir DialogFragment. Alt sınıf bir DatePickerDialogbarındıracak ve görüntüler:

Closeup of Date Picker dialog

Kullanıcı bir tarih seçip Tamam düğmesine tıkladığında yöntemi DatePickerDialog IOnDateSetListener.OnDateSetçağrılır. Bu arabirim barındırma DialogFragmenttarafından uygulanır. Kullanıcı İptal düğmesine tıklarsa parça ve iletişim kutusu kendi kendini kapatır.

seçilen tarihi barındırma etkinliğine döndürmenin birkaç yolu vardır DialogFragment :

  1. Bir yöntem çağırın veya bir özellik ayarlayın – Activity, bu değeri ayarlamak için özel olarak bir özellik veya yöntem sağlayabilir.

  2. Olay oluşturma – DialogFragment çağrıldığında OnDateSet tetiklenecek bir olayı tanımlayabilir.

  3. Action bir kullanın : DialogFragment , etkinlikte tarihi görüntülemek için bir Action<DateTime> çağırabilir. Etkinliği, örneği oluştururken öğesini DialogFragmentsağlarAction<DateTime. Bu örnek üçüncü tekniği kullanır ve Etkinliğin öğesine bir Action<DateTime> sağlamasını DialogFragmentgerektirir.

DialogFragment Genişletiyor

görüntülemenin DatePickerDialog ilk adımı alt sınıfa DialogFragment geçmek ve arabirimini uygulamasıdır 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);
    }
}

yöntemi NewInstance , yeni DatePickerFragmentbir örneği oluşturmak için çağrılır. Bu yöntem, kullanıcı içindeki Tamam düğmesine tıkladığında çağrılacak bir Action<DateTime> alır.DatePickerDialog

Parça görüntülendiğinde, Android yöntemini OnCreateDialogçağırır. Bu yöntem yeni DatePickerDialog bir nesne oluşturur ve bunu geçerli tarih ve geri çağırma nesnesiyle (geçerli örneği DatePickerFragmentolan) başlatır.

Not

Çağrıldığında IOnDateSetListener.OnDateSet ayın değerinin 1 ile 12 arasında değil 0 ile 11 arasında olduğunu unutmayın. Ayın günü 1 ile 31 arasında olacaktır (seçilen aya bağlı olarak).

DatePickerFragment gösteriliyor

artık uygulandığına DialogFragment göre, bu bölüm bir Etkinlikte parçanın nasıl kullanılacağını inceleyecektir. Bu kılavuza eşlik eden örnek uygulamada Etkinlik, fabrika yöntemini kullanarak öğesinin DialogFragment örneğini NewInstance oluşturur ve ardından çağrısını DialogFragment.Showgörüntüler. örneğini oluşturmanın DialogFragmentbir parçası olarak, Etkinlik, etkinliğin barındırdığı bir içinde tarihi görüntüleyen bir Action<DateTime>TextView geçirir:

[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);
    }
}

Özet

Bu örnekte, bir DatePicker pencere öğesinin Android Etkinliğinin bir parçası olarak açılır pencere iletişim kutusu olarak nasıl görüntüleneceği açıklanmıştır. Örnek bir DialogFragment uygulaması sağladı ve arabirimini IOnDateSetListener tartıştı. Bu örnek ayrıca DialogFragment'ın seçili tarihi görüntülemek için konak Etkinliği ile nasıl etkileşim kurabileceğini de göstermiştir.