解决TimePickerDialog中onTimeSet执行两次的问题

据说DataPickerDialog也会出现这个问题!!!
最近,在写一个“滚去睡觉”的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();
        
    }


  //点击确定和取消按钮时,会出发onTimeSet;在dialog的onStop(比如dialog dismiss时)中,也调用了onTimeSet方法。
所以说复写对话框注掉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();
    
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值