gpt4 book ai didi

java - TimePickerDialog 在滚动分钟时禁用小时更改

转载 作者:行者123 更新时间:2023-12-05 00:00:10 27 4
gpt4 key购买 nike

当我滚动分钟时,Android Timepickerdialog 会不合逻辑地更改小时数。我在 timepickerdialog 中将分钟间隔设置为 30 分钟,因此分钟的值为 00 和 30。例如,当我将小时设置为 00 并将分钟从 00 更改为 30 时,小时减少一小时,所以现在是23:30 而我应该拥有的是 00:30。我意识到这不会发生在三星设备上,但会发生在所有其他制造商的设备上。有什么方法可以在滚动分钟时禁用小时更改吗?

这是我的代码

public class CustomTimePickerDialog extends TimePickerDialog {

private int TIME_PICKER_INTERVAL = 30;
private TimePicker mTimePicker;
private final OnTimeSetListener mTimeSetListener;
public int interval1 = 1;

public CustomTimePickerDialog(Context context, OnTimeSetListener listener,
int hourOfDay, int minute, boolean is24HourView, int interval) {

super(context, TimePickerDialog.THEME_HOLO_LIGHT, null, hourOfDay,
minute / interval, is24HourView);

TIME_PICKER_INTERVAL = interval;

mTimeSetListener = listener;

}

@Override
public void updateTime(int hourOfDay, int minuteOfHour) {
mTimePicker.setCurrentHour(hourOfDay);
mTimePicker.setCurrentMinute(minuteOfHour / TIME_PICKER_INTERVAL);

}

@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
if (mTimeSetListener != null) {
mTimeSetListener.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(),
mTimePicker.getCurrentMinute() * TIME_PICKER_INTERVAL);
}
break;
case BUTTON_NEGATIVE:
cancel();
break;
}
}

@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
try {
Class<?> classForid = Class.forName("com.android.internal.R$id");
Field timePickerField = classForid.getField("timePicker");
mTimePicker = (TimePicker) findViewById(timePickerField.getInt(null));
Field field = classForid.getField("minute");

NumberPicker minuteSpinner = (NumberPicker) mTimePicker
.findViewById(field.getInt(null));
minuteSpinner.setMinValue(0);
minuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1);
List<String> displayedValues = new ArrayList<String>();
for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
displayedValues.add(String.format("%02d", i));
}
minuteSpinner.setDisplayedValues(displayedValues
.toArray(new String[displayedValues.size()]));
} catch (Exception e) {
e.printStackTrace();
}
}
}

我知道至少有一个类似的问题,但没有解决问题的答案。 Android time picker auto change hours when minutes get scrolled

编辑:我还注意到,当我将分钟间隔更改为 15 时,效果很好。例如,当我将分钟数从 45 增加到 00 时,小时数增加一。当我将分钟数从 00 分钟减少到 45 小时时,同样的事情倒退了,小时数减少了一个。当分钟间隔为 6 时也是如此。所以问题仅出在 30 分钟间隔上,我的软件中必须有 30 分钟间隔。

最佳答案

我像下面这样解决了。只需在 minuteSpinner.setDisplayedValues()

之后调用分钟更改的监听器
minuteSpinner.setOnValueChangedListener { picker, oldVal, newVal ->
// Declare this listener to prevent hour change
}

我一直在寻找与您相同的问题,但找不到方法。所以我自己尝试了这个那个,找到了最简单的解决方案!

关于java - TimePickerDialog 在滚动分钟时禁用小时更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48801375/

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