DatePickerDialog.OnDateSetListener在三星设备上没有回调

时间:2013-08-23 12:20:18

标签: android datepicker android-datepicker

出于一些奇怪的原因,当我单击肯定按钮作为DatePickerDialog的一部分时,作为DateSetListener的一部分的onDateSet方法不会被调用仅在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 DEVICES

2 个答案:

答案 0 :(得分:6)

从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());
      }

    });

答案 1 :(得分:2)

我不确定,你的代码有什么问题,但这就是我做的,它在我的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);

我在 onClickListener()

onClick()方法中打开对话框
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方法。

enter image description here