2011-12-18 2 views
4

Я работаю над Android-приложением, которое в точке использует виджет DatePicker, но я заметил, что каждый раз, когда я пытаюсь изменить дату, обратный вызов OnDateChange вызывается дважды. Я мог бы жить с этим, если бы новая дата была согласованной на всех устройствах, но я только что заметил, что на эмуляторе сначала вызывается хорошая дата, а во второй раз со старой датой.Android: почему обратный вызов OnDateChange вызывается дважды?

это журнал печатается в обратном вызове:

12-18 20:29:12.285: E/MyOnDateChangeListener(5301): [email protected]90; year=2011; monthOfYear=11; dayOfMonth=19 
12-18 20:29:12.355: E/MyOnDateChangeListener(5301): [email protected]; year=2011; monthOfYear=11; dayOfMonth=18 

я упускаю что-то здесь?

Обратите внимание, что в журналах с телефона (Nexus S) оба раза у меня есть новая дата.

Вот слушатель:

public class MyOnDateChangeListener implements OnDateChangedListener { 
    @Override 
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     Log.e("MyOnDateChangeListener", view.toString() + "; year=" + year + "; monthOfYear=" + monthOfYear + "; dayOfMonth=" + dayOfMonth); 
     Date date = new Date(); 
     date.setDate(dayOfMonth); 
     date.setMonth(monthOfYear); 
     date.setYear(year - 1900); 

     // TODO: modify the list content. 
     ListEventsByDate(date); 
    } 
} 

А вот создание/регистрация часть:

currentDate = new Date(); 
    currentDate.setDate(day); 
    currentDate.setMonth(month); 
    currentDate.setYear(year - 1900); 

    MyOnDateChangeListener onDateChangeListener = new MyOnDateChangeListener(); 
    eventDatePicker.init(year, month, day, onDateChangeListener); 

    try { 
     eventDatePicker.setMinDate(currentDate.getTime() - DAY_IN_MILIS); 
    } catch (Throwable e) { 
     Log.e("ERR", "no MinDate method available"); 
    }; 

Я забыл упомянуть, что если я пишу дату в текстовых полях это нормально, проблема, о которой я говорю, - это только когда я нажимаю кнопки «+» и «-».

+0

, пожалуйста, напишите исходный код отверстия для деятельности –

+0

Это определенно поможет опубликовать источник. Есть ли у вас какой-то код, который устанавливает значения datepicker при запуске ondatechange? AFAIK нет никакой причины, что его следует вызывать дважды из-за взаимодействия с пользователем, но когда вы программно обновляете дату, когда будет запущен ondatechange. –

+0

Эй, спасибо за ваши ответы ... Я почти уверен, что здесь что-то не хватает ... но я просто не могу понять, что ... – Ciprian

ответ

0

Я нашел проблему. Это из-за моего кода. В методе ListEventsByDate() я сфокусировал внимание на списке ниже DatePicker и вызвал второй звонок!

Смежные вопросы