据说DataPickerDialog也会出现这个问题!!!
//点击确定和取消按钮时,会出发onTimeSet;在dialog的onStop(比如dialog dismiss时)中,也调用了onTimeSet方法。
当然, 复写对话框注掉onStop是网友们的方法,下面是我的方法,直接上代码:
最近,在写一个“滚去睡觉”的APP,在new TimePickerDialog(this,mTimeSetListener, mHour, mMinute, false) 的时候,
mTimeSetListener=
new OnTimeSetListener()
{
public void onTimeSet(TimePicker view ,int hourOfDay,int minute)
{
mHour= hourOfDay;
mMinute=minute;
addtime();
}
};
竟然执行了两次(点击一次“+”时,数据库中竟然有两条数据),一步一步测试,测试了好久,才测到是onTimeSet执行了两次的缘故。
网上一搜,说这是android4.1和4.2存在的一个bug,需要修改framework里的TimePickerDialog.java源文件,
即:
protected void onStop()
{
//tryNotifyTimeSet();
if (mCallback != null)
mTimePicker.clearFocus();
super.onStop();
}
总感觉不应该这么改的,因为developers上的文档说得很清楚:
protected void onStop() {
tryNotifyTimeSet();
super.onStop();
}
所以说复写对话框注掉onStop就行了,
@Override
protected void onStop() {
// TODO Auto-generated method stub
//super.onStop();
}
当然, 复写对话框注掉onStop是网友们的方法,下面是我的方法,直接上代码:
mTimeSetListener=
new OnTimeSetListener()
{
public void onTimeSet(TimePicker view ,int hourOfDay,int minute)
{
if(flag==true)
{
mHour= hourOfDay;
mMinute=minute;
addtime();
flag=false;
}
else
{
flag=true;
}
}
};
哇哇,其实我的方法是有bug的,按“取消”的时候也会往数据库插入数据。
还是复写onStop() 最好!!!
即:
import android.app.TimePickerDialog;
import android.content.Context;
public class MyTimePickerDialog extends TimePickerDialog {
public MyTimePickerDialog(Context context, OnTimeSetListener callBack,
int hourOfDay, int minute, boolean is24HourView) {
super(context, callBack, hourOfDay, minute, is24HourView);
// TODO Auto-generated constructor stub
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
//super.onStop();
}
}