2010-01-12 18 views
45

Android'de DatePicker.OnDateChangedListener adında bir olay dinleyicisi var.Android - OnDateChangedListener - bunu nasıl belirlersiniz?

DatePicker dp = new DatePicker(getContext()); 
dp.setOnDateChangedListener(this); 
//where this is my activity extends DatePicker.OnDateChangedListener 

Ama ne tahmin: Ben şöyle bir DatePicker görünümün tarihte değiştirildi dinleyici ayarlayın çalışıyorum ? Tarih seçici, setOnDateChangedListener adlı bir yönteme sahip değildir.

Sorum şu:

  1. Nasıl o zaman bir tarih Android'de dinleyici değişti ayarlarım?
  2. Tarih değiştirilmiş bir dinleyici ayarlamak mümkün değilse, bu olayın amacı nedir?

Tüm belgeler/eğiticiler çok yardımcı olacaktır.

cevap

92

DatePicker numaralı telefonunuzu oluşturduktan sonra, önce görüntülemek istediğiniz tarihle baştan başlatmanız gerekir. Dinleyicinizi ekleyebileceğiniz nokta budur.

Bkz. DatePicker.init(int, int, int, OnDateChangedListener).

+87

Android API gerçekten bir şeydir. Acaba bu saçma yaklaşımla kim geldiğini merak ediyorum – Tawani

+1

Bana göre bu hiç de gülünç görünmüyor ve en azından API belgelerinde. Her neyse, bunun sebebi, Android widget'larının genellikle hangi stille ve mizanpaj özelliklerinin oluşturulacağını kontrol etmek istediğinizde, birçok kurucuya sahip olmasından kaynaklandığını düşünmekteyim. Bu nedenle, pek çok parametreyle çok sayıda kurucu oluşturmak yerine bu kongreye devam ettiler. –

+4

Bir tıklama dinleyicisi ayarlamak için mevcut olan setOnDateChangedListener() yönteminin olması uygun görünmektedir. Sizi neden otomatik olarak bugün sizin için başlattığı bir tarihe hazırladığınızı merak ediyorum. –

11

Bu görüş aslında dört görünümden bir kombinasyonudur, ve bunlar:

Üç Eğiriciler

Bir OnDateChangeListener, sen init yönteme geçirilen nesne gibi CalendarView

olacak basitçe içerilen CalendarView'a geçilsin, ve ben iyi eski CalendarView ......................................................................................................... 0

DatePicker sınıfında bir setOnDateChangeListener yöntemi olduğunu biliyorsunuzdur. denilen getCalendarView ve elinizde bulunan Takvim Görünümü'nü almak istiyorsanız arayabileceğiniz yöntemdir. Eğer içerdiği CalendarView ellerini aldıktan sonra

, o zaman, gereksiz onun setOnDateChangeListener böyle

+3

Bu, korkunç bir API için harika bir çözümdür. Bunun için teşekkürler - sadece pastırmamı kurtardın! – sleeke

+0

datePicker.getCalendarView() setOnDateChangeListener() tamamen çalışıyor! Teşekkürler! Ancak çok sezgisel değil. Hala API'nın datePicker.setOnDateChangeListner() olması gerektiğini düşünün. – ONE

7

şey arayabilir, demek:

DatePicker myDatePicker = (DatePicker) findViewById(R.id.my_date_picker); 
myDatePicker.getCalendarView().setOnDateChangeListener(new CalendarView.OnDateChangeListener() { 
    @Override 
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) { 
     Log.d("tag", "finally found the listener, the date is: year " + year + ", month " + month + ", dayOfMonth " + dayOfMonth); 
    } 
}); 
+0

Bu, UnsupportedOperationException verir: DatePicker için –

+1

bir DatePicker, bir DatePicker'ı şişir: datePickerMode = "spinner" ve Listener benim için çalıştı. Herhangi bir mantıksal açıklama olmadan ... – user2331454

30

En yoludur

 DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() { 

       @Override 
       public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) { 
        Log.d("Date", "Year=" + year + " Month=" + (month + 1) + " day=" + dayOfMonth); 

       } 
      }); 
+2

Güzel örnek. Teşekkürler. –

İlgili konular