一 编写目的
虽然目前有很多的时间选择控件可以给开发者使用,但有的时候由于使用行业,手机页面布局,手机屏幕等因素,我们还是需要使用android自带的时间选择控件。我最近使用系统时间选择控件的时候,发现了一个问题,就是高版本的系统中onDateSet方法会调用两次,这就意味着低版本中在onDateSet中实现的逻辑在高版本中会执行两次,这样就会给我们软件的兼容问题带来一些麻烦,因此这个地方把解决方法记录下,方便大家学习。
二 问题原因
我手中有几台不同系统版本的手机,发现在4.3系统后的(下面就是4.1版本,4.2没测试过)版本中运行测试代码的时候,onDateSet中打印日志执行两次,而低版本的只执行了一次,这就说明很有可能是高版本系统在这个地方做了修改,因此我去查阅了下系统源码,对比一下,发现了其中问题。
低版本的源码:
public void onClick(DialogInterface dialog, int which) {
if (mCallBack != null) {
mDatePicker.clearFocus();
mCallBack.onDateSet(mDatePicker, mDatePicker.getYear(),
mDatePicker.getMonth(), mDatePicker.getDayOfMonth());
} }
就是说点击确定或取消按钮的时候会执行onDateSet方法。
高版本的源码:
public void onClick(DialogInterface dialog, int which) {
tryNotifyDateSet();
}
private void tryNotifyDateSet() {
if (mCallBack != null) {