DatePickerDialog设置默认当前日期失效,显示异常日期求助
嘿,我之前也踩过类似的坑!你这段代码逻辑看上去没问题,但实际跑起来不对,大概率是几个容易忽略的细节出了问题,咱们一步步来排查:
变量作用域或意外赋值问题
你定义的year、month、day会不会是类成员变量?如果是的话,很可能在代码的其他地方被意外改成了2000、1、28(别忘了Calendar的月份是0-based,2月对应数值1)。
最快的验证方法是把变量改成局部变量,直接在创建Dialog时传入:Calendar c = Calendar.getInstance(); DatePickerDialog datePickerDialog = new DatePickerDialog( getActivity(), onDateSetListener, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH) );这样能彻底避免外部代码对变量的干扰。
主题/自定义样式冲突
有些自定义App主题或者第三方UI库会覆盖DatePickerDialog的默认行为,比如硬编码了默认日期。你可以试试创建Dialog时指定系统默认主题,排除样式干扰:DatePickerDialog datePickerDialog = new DatePickerDialog( getActivity(), android.R.style.Theme_Holo_Light_Dialog, onDateSetListener, year, month, day );同时检查你的App主题配置,看看有没有
android:datePickerStyle这类属性,是不是被设置了固定日期值。onDateSetListener回调的逻辑干扰
会不会是你的onDateSetListener里,在初始化阶段就把显示控件的日期硬写成了2/28/2000?比如错误地在回调外或者回调的初始化逻辑里给UI控件赋值了旧日期,而不是用Dialog返回的结果。
仔细检查onDateSet方法的代码,确保只有用户选择日期后才更新显示,不要在一开始就硬编码默认值。Calendar时区或系统时间问题(概率较低)
虽然可能性不大,但可以打印一下Calendar实例的日期,确认是不是拿到了正确的本地时间:Calendar c = Calendar.getInstance(); Log.d("DateDebug", "当前日期:" + (c.get(Calendar.MONTH)+1) + "/" + c.get(Calendar.DAY_OF_MONTH) + "/" + c.get(Calendar.YEAR));如果日志里的日期不是预期的04/16/2018,那可能是设备时区或者系统时间设置的问题。
内容的提问来源于stack exchange,提问作者batsheva

