Android - OnDateChangedListener - как это установить? - PullRequest
54 голосов
/ 12 января 2010

В Android есть прослушиватель событий с именем DatePicker.OnDateChangedListener . Я пытаюсь настроить представление DatePicker для прослушивателя, изменившего дату, следующим образом:

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

Но угадайте что? Средство выбора даты не имеет метода с именем setOnDateChangedListener .

Мой вопрос:

  1. Как тогда установить дату изменения прослушивателя в Android?
  2. Если невозможно установить дату измененного слушателя, какова цель этого события?

Любая документация / руководства будут очень полезны.

Ответы [ 5 ]

103 голосов
/ 12 января 2010

После того, как вы создали DatePicker, вам нужно инициализировать его датой, которую вы хотите отобразить сначала. В этот момент вы можете добавить своего слушателя .

См. DatePicker.init(int, int, int, OnDateChangedListener).

36 голосов
/ 22 января 2016

Лучший способ это

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

                }
            });
11 голосов
/ 16 мая 2013

Это представление фактически является комбинацией четырех представлений, и они:

Три спиннера

Один CalendarView

Начиная с OnDateChangeListener, объект, который вы передали методу init, будет просто передан в содержащий CalendarView, и я считаю, что вы знаете, что в старом добром старом CalendarView есть метод setOnDateChangeListener ...... .....

В классе DatePicker есть метод, называемый getCalendarView, и это метод, который вы можете вызывать, если хотите получить доступ к содержащемуся в нем CalendarView.

Как только вы получите доступ к содержанию CalendarView, то, разумеется, вы можете вызвать его setOnDateChangeListener

9 голосов
/ 09 августа 2015

Примерно так:

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);
    }
});
3 голосов
/ 12 января 2010
...