TimePickerDialog cancel button problem.

来源:互联网 发布:java数组为空和为null 编辑:程序博客网 时间:2024/05/29 11:50

在Android version 4.4.4下使用TimePickerDialog的时候,TimePickerDialog.OnTimeSetListener的事件在点击确定和取消的时候都会被执行。

在编程的时候常常不想在取消时执行OnTimeSetListener,所以可以使用下面方法解决这个问题。

public class MyTimePickerDialog  {private TimePickerDialog dp = null;private boolean saveBtnPress = false; private OnTimeChangeListener listener = null;public void setTitle (String title){dp.setTitle(title);}public MyTimePickerDialog (Context ct, OnTimeChangeListener l){listener = l;Calendar c = Calendar.getInstance();initDatePickerDialog (ct, c);}public MyTimePickerDialog (Context ct, Calendar calendar, OnTimeChangeListener l){listener = l;initDatePickerDialog (ct, calendar);}private void initDatePickerDialog (Context ct, Calendar c){int hour = c.get(Calendar.HOUR_OF_DAY);int min = c.get(Calendar.MINUTE);dp = new TimePickerDialog(ct, new timePickListener(), hour, min, true);dp.setCancelable(false);dp.setIcon(R.drawable.ic_launcher);dp.setButton(DatePickerDialog.BUTTON_POSITIVE, "Save", new datePickButtonListener());dp.setButton(DatePickerDialog.BUTTON_NEGATIVE, "Cancel", new datePickButtonListener());}public void show (){dp.show();}class datePickButtonListener implementsDialogInterface.OnClickListener {public void onClick(DialogInterface dialog, int which) {switch (which){case DatePickerDialog.BUTTON_POSITIVE:saveBtnPress = true;break;case DatePickerDialog.BUTTON_NEGATIVE:saveBtnPress = false;break;}}}class timePickListener implements TimePickerDialog.OnTimeSetListener{@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {if (listener != null){listener.OnTimeChange(saveBtnPress, hourOfDay, minute);}}}public interface OnTimeChangeListener {void OnTimeChange (boolean saveBtnPress, int hour, int min);}}


但是上面方法有一个问题,在Android version 4.4.2中会出现OnTimeSetListener无法被调用的问题。可以使用AlertDialog 来解决这个问题。

public class MyTimePickerDialog  {private OnTimeChangeListener listener = null;public MyTimePickerDialog (Context ct, OnTimeChangeListener l){listener = l;Calendar c = Calendar.getInstance();initDatePickerDialog (ct, c);}public MyTimePickerDialog (Context ct, Calendar calendar, OnTimeChangeListener l){listener = l;initDatePickerDialog (ct, calendar);}private void initDatePickerDialog (Context ct, Calendar c){int hour = c.get(Calendar.HOUR_OF_DAY);int min = c.get(Calendar.MINUTE);final TimePicker timePicker = new TimePicker(ct);timePicker.setIs24HourView(true);timePicker.setCurrentHour(hour);timePicker.setCurrentMinute(min);new AlertDialog.Builder(ct).setTitle("Set Dining Time:").setPositiveButton("OK", new AlertDialog.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {SmabDebug.log(timePicker.getCurrentHour() + ":"+ timePicker.getCurrentMinute());if (listener != null){listener.OnTimeChange(timePicker.getCurrentHour(), timePicker.getCurrentMinute());}}}).setNegativeButton("Cancel",new AlertDialog.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {SmabDebug.log("Click Cancelled!");}}).setView(timePicker).show();}public interface OnTimeChangeListener {void OnTimeChange (int hour, int min);}}



0 0