android– 防止用户选择过去的时间 –TimePickerDialog

android– 防止用户选择过去的时间 –TimePickerDialog,第1张

概述重要编辑:我已经做了一些搜索,似乎OnTimeChangedListener不会在Android5.0(API21)中触发.Gustavo的答案将适用于API20或更低版本,以及我测试过的API22.(Source)我想阻止用户输入当前时间之前的时间.我使用Date提供的before方法检查有效时间.如何防止对话框在此有效性检查中接

重要编辑:我已经做了一些搜索,似乎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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存