Androidと呼ばれるDatePicker.OnDateChangedListenerにイベントリスナーがあります。次のようにDatePickerビューの日付変更リスナーを設定しようとしています。
DatePicker dp = new DatePicker(getContext());
dp.setOnDateChangedListener(this);
//where this is my activity extends DatePicker.OnDateChangedListener
しかし、何だと思う?日付ピッカーにはsetOnDateChangedListenerというメソッドはありません。
私の質問は:
すべてのドキュメント/チュートリアルは非常に役立ちます。
DatePicker
を作成したら、最初に表示する日付で初期化する必要があります。これが、listenerを追加できるポイントです。
DatePicker.init(int, int, int, OnDateChangedListener)
を参照してください。
最善の方法は
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);
}
});
このビューは、実際には4つのビューの組み合わせであり、次のとおりです。
3つのスピナー
1つのCalendarView
OnDateChangeListenerの時点で、initメソッドに渡したオブジェクトは含まれているCalendarViewに単純に渡され、古き良きCalendarViewにsetOnDateChangeListenerメソッドがあることを知っていると思います...... .... ..
DatePickerクラスには、getCalendarViewというメソッドがあります。これは、含まれているCalendarViewを手に入れたい場合に呼び出すことができるメソッドです。
含まれているCalendarViewを取得したら、言うまでもなく、そのsetOnDateChangeListenerを呼び出すことができます
このようなもの:
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);
}
});
DatePicker
オブジェクトで init()
を呼び出します 。