昨天测试上报了一条bug,内容大概为:在小米2手机中点击生日弹出DatePickerDialog后,修改日期,不点击完成,点击返回键,会修改TextView中的日期。
经过分析,代码当中我把处理日期的判断逻辑放在了OnDateSetListener监听的onDateSet()回调方法,当逻辑判断通过,就会修改的TextView当中的日期,这说明当我们点击返回键的时候会调用到onDateSet()回调方法。
但是DatePickerDialog提供的方法当中并没有直接控制点击返回键的方法,我是怎么处理的呢?
我最早的想法就是利用DatePickerDialog中提供的setButton方法,设置为一个确定,一个取消两个按键,但是这无疑当中添加很多的代码量,和逻辑处理。
有没有更方便,更简单的方法呢?有的,继承DatePickerDialog重写生命周期方法onStop()。
细心的同学肯定看到我注释掉了,super.onStop(),为什么注释掉这个方法就能达到返回键不调用onDateSet方法呢?
DatePickerDialog 源码当中,onStop()生命周期当中,会调用tryNotifyDateSet();
tryNotifyDateSet();通过方法名,大家也看到了,他是通知onDateSet()方法,这说明当DatePickerDialog 生命周期到onStop()的时候会调用到onDateSet。tryNotifyDateSet()方法如下:
这也就解释了为什么我在重写当中注释掉super方法,而达到了目的。
再一个,为了避免重复造轮,我事先搜索过,还没有解释该问题文章,所以就发上来了,如果有不对的地方,恳请大家指教。