Android:Android 4.1模拟器从DatePicker对话框调用onDateSet两次

Nou*_*n H 18 android datepicker emulation android-4.2-jelly-bean

我的应用程序在我的Android 2.2模拟器上完美运行.然后我决定在Android 4.1模拟器上进行测试.该DatePickerDialog看起来有点不同,因为当我按下"完成"某些原因,onDateSet()听众被调用两次,导致我的应用程序的问题.

我知道这一点,因为每当我点击"完成"时,代码中显示的日志就打印了两次

mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            Log.v("onDateSet", "ENTERED");
            //rest of code...
    }};
Run Code Online (Sandbox Code Playgroud)

Android 2.2 DatePicker

使用Android 2.2 DatePicker

Android 4.1 DatePicker

不能使用Android 4.1 DatePicker

lod*_*ock 24

尝试设置布尔值以检查同一对话框中的双重火灾.类似的东西:

Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_YEAR, 1);
final DatePickerDialog dateDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
    boolean fired = false;
    public void onDateSet(final DatePicker view, final int year, final int monthOfYear, final int dayOfMonth) {
        Log.i("PEW PEW", "Double fire check");
        if (fired) {
            Log.i("PEW PEW", "Double fire occured. Silently-ish returning");
            return;
        } else {
            //first time fired
            fired = true;
        }
        //Normal date picking logic goes here
    }
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
dateDialog.show();
Run Code Online (Sandbox Code Playgroud)

这个双重火灾问题也发生在TimePickerDialog的onTimeSet上,这个检查也适用于那些.

  • 这是一个不完整的解决方案 [错误](https://code.google.com/p/android/issues/detail?id=34860#c21)在按下"完成"按钮并且当对话框被解除时调用`onDateSet()` .后者另外存在问题,因为日期将在用户取消时设置(即,在对话框之外按下或轻击).此处发布的解决方案无法解决此问题. (3认同)