zoukankan      html  css  js  c++  java
  • TimerPickerDialog 中 onTimeSet 执行两次的问题

    开发android小闹钟的程序时,在添加闹钟时闹钟列表中总是出现两个相同的闹钟。

     1 btnAddAlarm.setOnClickListener(new View.OnClickListener() {
     2 
     3             @Override
     4             public void onClick(View v) {
     5                 if(tpd == null){
     6                     addAlarm();
     7                 }
     8 
     9                 tpd.show();
    10             }
    11         });
    12 private void addAlarm() {
    13 
    14         TimePickerDialog.OnTimeSetListener otsl = new OnTimeSetListener() {
    15 
    16 
    17             @Override
    18             public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    19                 Calendar setTime = Calendar.getInstance();
    20                 setTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
    21                 setTime.set(Calendar.MINUTE, minute);
    22                 setTime.set(Calendar.SECOND,0);
    23                 setTime.set(Calendar.MILLISECOND, 0);
    24 
    25                 Calendar currentTime = Calendar.getInstance();
    26 
    27                 if (setTime.getTimeInMillis() <= currentTime.getTimeInMillis()) {
    28                     setTime.setTimeInMillis(setTime.getTimeInMillis()+ 24 * 60 * 60 * 1000);
    29                 }
    30 
    31                 adapter.add(new AlarmData(setTime.getTimeInMillis()));
    32 
    33                 alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
    34                         setTime.getTimeInMillis(), 5 * 60 * 1000,
    35                         PendingIntent.getBroadcast(getContext(), 
    36                                 new AlarmData(setTime.getTimeInMillis()).getId(),
    37                                 new Intent(getContext(),
    38                                         AlarmReceiver.class), 0));
    39 
    40                 saveAlarmList();
    41 
    42             }
    43         };
    44 
    45 
    46         Calendar c = Calendar.getInstance();
    47         int hourOfDay = c.get(Calendar.HOUR_OF_DAY);
    48         int min = c.get(Calendar.MINUTE);
    49         tpd = new TimePickerDialog(getContext(), otsl, hourOfDay, min, true);
    50     }

    刚开始以为是adapter的问题,于是在初始化函数中加了添加闹钟的代码,结果只有一个闹钟。最后确定是TimePickerDialog的问题,上网查找才知道这是android4.1和4.2的bug,需要重写TimePickerDialog中的onStop方法,把onStop()中super.onStop()注释掉就行了

    1 tpd = new TimePickerDialog(getContext(), otsl, hourOfDay, min, true){
    2             @Override
    3             protected void onStop() {
    4                 //super.onStop();
    5             }
    6         };
    Do not be evil
  • 相关阅读:
    头信息已输出的报错信息位置定位
    阅读<php程序设计>笔记
    include、ruquire使用相对路径总结
    php中未定义的变量使用技巧
    Oracle官方教材(9i、10G及App 11i)
    Vista的软件兼容性
    轻松找回Vista序列号
    oralce定时执行存储过程任务设置步骤详细
    今天做了内存测试,发现真的是内存问题导致的一连串的问题
    网络邮盘(GMailStore) V3.0.2
  • 原文地址:https://www.cnblogs.com/nangch/p/5353579.html
Copyright © 2011-2022 走看看