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         };
posted @ 2015-02-17 17:14  Devinzx  阅读(252)  评论(0编辑  收藏  举报