当我点击Dialog时,它会获得Forceclose。工作到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;
}
答案 0 :(得分:1)
在仔细观察粘贴在问题中的代码后,这是你犯的错误。
在onCreateDialog()
的第一个if循环中,您将获得此格式的日期12/31/1986。你把月份当作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)));
}
希望它适合你。