gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:57 25 4
gpt4 key购买 nike

重要编辑:我做了一些搜索,似乎 OnTimeChangedListener 不会在 Android 5.0 (API 21) 中触发。 Gustavo 在下面的回答适用于 API 20 或更低版本,以及我测试过的 API 22。 ( Source )

我想阻止用户输入当前时间之前的时间。我使用 Date 提供的 before 方法检查有效时间。如何防止对话框在此有效性检查中接受无效时间?

我省略了初始化选定时间的多余代码(作为 Date)。

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 time
mTimePicker.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;
}

@Override
public 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);
}
}

之后,将 TimePickerDialog 替换为 RangeTimePickerDialog

public class MainActivity extends Activity {

@Override
protected 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31273362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com