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
  • 相关阅读:
    Virtual Studio 2010在Release模式下进行调试的设置方法
    OpenGL Shader
    OGRE的安装编译
    开源GIS平台空间数据管理与发布技术研究
    风靡世界的小游戏2048源代码
    成为优秀程序员的几个阶段
    颜色空间模型(HSVLABRGBCMYK)
    希望自己的博客被知名搜索引擎收录的网址
    我的第一篇博客
    当你的善良受到委屈时
  • 原文地址:https://www.cnblogs.com/nangch/p/5353579.html
Copyright © 2011-2022 走看看