开发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 };