【问题标题】:TimePickerDialog disable hours change when scrolling minutesTimePickerDialog 在滚动分钟时禁用小时更改
【发布时间】:2018-02-15 06:48:51
【问题描述】:

当我滚动分钟时,Android 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 分钟间隔。

【问题讨论】:

  • 您找到解决方案了吗?
  • @CodeLikeBeaker 不,我还没有找到解决方案

标签: java android time android-timepicker timepickerdialog


【解决方案1】:

我像下面这样解决了它。只需在 minuteSpinner.setDisplayedValues() 之后调用分钟更改的侦听器

minuteSpinner.setOnValueChangedListener { picker, oldVal, newVal ->
    // Declare this listener to prevent hour change 
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多