【问题标题】:DatePickerDialog.OnDateSetListener does not get a callback on Samsung devicesDatePickerDialog.OnDateSetListener 在三星设备上没有得到回调
【发布时间】:2013-08-23 12:20:17
【问题描述】:

由于某些奇怪的原因,当我单击作为 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 设备

【问题讨论】:

  • 你在使用自定义日期选择器吗?
  • 我正在使用带有 OnDateSetListenerDatePickerDialog,它在我的三星 Galaxy S2 (4.1.2) 上运行没有任何问题。您使用的是哪个 Android 版本?
  • 检查这个stackoverflow.com/questions/18211684/…链接中的第一个方法是在samsun Galaxy s3上测试的
  • 我使用的是安卓4.0.3

标签: android datepicker android-datepicker


【解决方案1】:

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

    });

【讨论】:

  • 哇,谷歌的 DatePickerDialog 设计太糟糕了!!
【解决方案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 方法就会被调用。

【讨论】:

  • 嘿大卫。非常感谢您的回复。它是否可以与带有 OnClickListener 的 setButton 一起使用?
  • 我将它添加到我上面的答案中。短版:是的,没有任何问题;)
  • 被调用的 onClick() 很好,但是你的 OnDateSetListener 回调被调用了吗?
  • onDataSet() 方法?是的,那个也是。
  • 可以分享您的活动代码吗?这个 datePickerDialog 所做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 2012-05-06
相关资源
最近更新 更多