DatePickerDialog.OnDateSetListener не получает обратный вызов на устройствах Samsung

По какой-то странной причине, когда я нажимаю кнопку «+» как часть DatePickerDialog, метод onDateSet как часть DateSetListener не вызывается ТОЛЬКО НА УСТРОЙСТВАХ SAMSUNG.

Вот что я делаю:

DateSetListener _datePickerDialogCallback = new DateSetListener();

DatePickerDialog _datePickerDialog = new DatePickerDialog(context, _datePickerDialogCallback, year, month, days);
_datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, StringUtil.getString(R.string.command_ok), new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface arg0, int arg1) {
      _done = true;
    }

  });

_datePickerDialog.show();



private class DateSetListener implements DatePickerDialog.OnDateSetListener {

  public void onDateSet(DatePicker view, int year, int month, int day) {

    Calendar calendar = Calendar.getInstance();
    calendar.set(year, month, day, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE),
        calendar.get(Calendar.SECOND));

    if (_done) {
      _view.setText(formatDate(calendar.getTime()));
    }
  }
}

Любые предложения о том, почему это может происходить, будут оценены. Пожалуйста. обратите внимание, что это только на УСТРОЙСТВАХ SAMSUNG


person lokoko    schedule 23.08.2013    source источник
comment
вы используете настраиваемый выбор даты?   -  person Hariharan    schedule 23.08.2013
comment
Я использую DatePickerDialog с OnDateSetListener, и он без проблем работает на моем Samsung Galaxy S2 (4.1.2). Какую версию Android вы используете?   -  person David    schedule 23.08.2013
comment
проверьте этот stackoverflow.com/questions/18211684/ первый метод в ссылке проверен на samsun galaxy s3   -  person Raghunandan    schedule 23.08.2013
comment
Я использую андроид 4.0.3   -  person lokoko    schedule 23.08.2013


Ответы (2)


Похоже, что из ICS и выше обратный вызов не нужно определять при определении datePickerDialog. Но onPositiveButtonClick и onNegativeButtonClick должны будут вызвать обратный вызов. что-то типа :

    _datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Ok", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface arg0, int arg1) {
        _done = true;
        DatePicker datePicker = _datePickerDialog.getDatePicker();
        _datePickerDialogCallback.onDateSet(datePicker, datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
      }

    });
person lokoko    schedule 30.09.2013
comment
вау, какой дерьмовый дизайн от Google с DatePickerDialog!! - person Serdar Samancıoğlu; 21.02.2019

Я не уверен, что не так с вашим кодом, но я сделал это так, и это работает на моем SG2 (я не делал setButton)

Мой OnDataSetListener реализован как внутренний класс:

class DatePickHandler implements OnDateSetListener {
    @Override
    public void onDateSet(DatePicker view, int year, 
        int monthOfYear, int dayOfMonth) {
       //do stuff
       mDateDialog.hide();
    }   
}

Создание моего DatePickerDialog во фрагменте моего приложения

mDateDialog = new DatePickerDialog(getActivity(), 
    new DatePickHandler(), mYear, mMonth, mDay);

Затем я открываю диалоговое окно внутри метода onClick() метода onClickListener().

mDateDialog.show();

правка 26.08.13\

я добавил следующее

mDateDialog.setButton(DialogInterface.BUTTON_POSITIVE, "test text", new
    DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        Log.i("test", "in onclick");
});

Вот как это выглядит сейчас. После того, как я нажимаю кнопку «тестовый текст», вызывается мой недавно созданный метод onClick.

введите здесь описание изображения

person David    schedule 23.08.2013
comment
Эй, Дэвид. Большое спасибо за ваш ответ. Работает ли это с setButton с OnClickListener как часть этого? - person lokoko; 26.08.2013
comment
Я добавил это к своему ответу выше. Краткая версия: Да, работает без проблем ;) - person David; 26.08.2013
comment
Вызов onClick() в порядке, но вызывается ли ваш обратный вызов OnDateSetListener? - person lokoko; 27.08.2013
comment
Метод onDataSet()? Да, тот тоже. - person David; 27.08.2013
comment
Можно поделиться кодом активности? что делает этот datePickerDialog. - person lokoko; 27.08.2013
comment
DateDialog открывается во фрагменте. Фрагмент размещен в почти пустой активности. Я использую ActionbarSherlock, потому что в другом действии также есть панель навигации. Вы используете фрагмент или активность? Что в вашей контекстной переменной? - person David; 27.08.2013