重要编辑:我已经做了一些搜索,似乎OnTimeChangedListener不会在Android 5.0(API 21)中触发. Gustavo的答案将适用于API 20或更低版本,以及我测试过的API 22. (Source)
我想阻止用户输入当前时间之前的时间.我使用Date提供的before方法检查有效时间.如何防止对话框在此有效性检查中接受无效时间?
我在初始化所选时间(作为日期)时省略了多余的代码.
final Calendar mcurrentTime = Calendar.getInstance();final int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);final int minute = mcurrentTime.get(Calendar.MINUTE);final TimePickerDialog mTimePicker;mTimePicker = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @OverrIDe public voID onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { //PSEUDO: Date selectedDateTime init here if (selectedDateTime.before(mcurrentTime.getTime())) { // prevent user from selecting time } }}, hour, minute, true);//true = 24 hour timemTimePicker.setTitle("Select Time");mTimePicker.show();
解决方法:
Here原帖.
下面的答案你应该添加TimePickerDialog类.
public class RangeTimePickerDialog extends TimePickerDialog {private int minHour = -1;private int minMinute = -1;private int maxHour = 25;private int maxMinute = 25;private int currentHour = 0;private int currentMinute = 0;private Calendar calendar = Calendar.getInstance();private DateFormat dateFormat;public RangeTimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourVIEw) { super(context, callBack, hourOfDay, minute, is24HourVIEw); currentHour = hourOfDay; currentMinute = minute; dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT); try { Class<?> superclass = getClass().getSuperclass(); FIEld mTimePickerFIEld = superclass.getDeclaredFIEld("mTimePicker"); mTimePickerFIEld.setAccessible(true); TimePicker mTimePicker = (TimePicker) mTimePickerFIEld.get(this); mTimePicker.setonTimeChangedListener(this); } catch (NoSuchFIEldException e) { } catch (IllegalArgumentException e) { } catch (illegalaccessexception e) { }}public voID setMin(int hour, int minute) { minHour = hour; minMinute = minute;}public voID setMax(int hour, int minute) { maxHour = hour; maxMinute = minute;}@OverrIDepublic voID onTimeChanged(TimePicker vIEw, int hourOfDay, int minute) { Log.d("DADADADA", "onTimeChanged"); boolean valIDTime = true; if (hourOfDay < minHour || (hourOfDay == minHour && minute < minMinute)) { valIDTime = false; } if (hourOfDay > maxHour || (hourOfDay == maxHour && minute > maxMinute)) { valIDTime = false; } if (valIDTime) { currentHour = hourOfDay; currentMinute = minute; } updateTime(currentHour, currentMinute); updateDialogTitle(vIEw, currentHour, currentMinute);}private voID updateDialogTitle(TimePicker timePicker, int hourOfDay, int minute) { calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); calendar.set(Calendar.MINUTE, minute); String Title = dateFormat.format(calendar.getTime()); setTitle(Title);}}
之后,将RangeTimePickerDialog替换为TimeTimePickerDialog
public class MainActivity extends Activity {@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); final Calendar mcurrentTime = Calendar.getInstance(); final int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); final int minute = mcurrentTime.get(Calendar.MINUTE); final RangeTimePickerDialog mTimePicker; mTimePicker = new RangeTimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @OverrIDe public voID onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { Log.d("TAG", "insIDe OnTimeSetListener"); } }, hour, minute, true);//true = 24 hour time mTimePicker.setTitle("Select Time"); mTimePicker.setMin(hour, minute); mTimePicker.show();}}
在那之后,检查对话框,时间没有通过限制,我已经使用setMax()或setMin()检查了这一点,并且只设置了一个.
总结以上是内存溢出为你收集整理的android – 防止用户选择过去的时间 – TimePickerDialog全部内容,希望文章能够帮你解决android – 防止用户选择过去的时间 – TimePickerDialog所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)