日期对话框在12月份时被取消



当我点击对话框,它得到强制关闭。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;
    }

仔细观察了您粘贴在Question中的代码后,发现这是您犯的一个错误。

onCreateDialog()的第一个if循环中的

,您将以这种格式获得日期12/31/1986。其中,你把月作为12。

在else循环中,您直接从Calendar实例中获取month,这将只给您最多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)));
        }

希望对你有用

最新更新