0

当我单击对话框时,它会强制关闭。工作正常,直到 11 月。但是当我选择 12 月时,它会强制关闭。请看代码。

  // ---------------- For DatePicker ----------------
    @Override
    protected Dialog onCreateDialog(int id) {
        if(date.toString().length() > 0)
        {
            //12/31/1986
            cmonth =(Integer.parseInt(date.substring(0,2)));
            cday =(Integer.parseInt(date.substring(3,5)));
            cyear =(Integer.parseInt(date.substring(6,10)));
        }
        else
        {
            Calendar c = Calendar.getInstance();
            cyear = c.get(Calendar.YEAR);
            cmonth = c.get(Calendar.MONTH);
            cday = c.get(Calendar.DAY_OF_MONTH);
        }
        switch (id) {
        case DATE_DIALOG_ID:
            //return new DatePickerDialog(ProfileSetting.this, mDateSetListener, cyear, cmonth-1, cday); //Gets forceclose when it comes to December month
            return new DatePickerDialog(ProfileSetting.this, mDateSetListener, cyear, cmonth, cday); // works till November
        }
        return null;
    }
4

1 回答 1

1

在仔细观察您粘贴在问题中的代码后,这是您犯的错误。

在第一个 if 循环中,onCreateDialog()您将获得 1986 年 12 月 31 日这种格式的日期。您将月份设为 12。

在 else 循环中,您直接从 Calendar 实例中获取月份,这最多只能为您提供 11 个。

因此,要在这两种情况下工作,您需要在第一个 if 循环中减少月份。

改变你的 if 循环如下

if(date.toString().length() > 0)
        {
            //12/31/1986
            cmonth =(Integer.parseInt(date.substring(0,2)));
            cmonth--;
            cday =(Integer.parseInt(date.substring(3,5)));
            cyear =(Integer.parseInt(date.substring(6,10)));
        }

希望它对你有用。

于 2013-01-11T13:29:55.960 回答