【问题标题】:TimePicker with 30 minute interval not working间隔 30 分钟的 TimePicker 不起作用
【发布时间】:2020-02-18 10:06:19
【问题描述】:

我正在开发一个 android 应用程序,我想将 timepicker 间隔设置为 30 分钟而不是默认情况下的 1 分钟。这是我的代码:

private void setTimePickerIntervalZeroThirtyMinutes(TimePicker timePicker) {
        int TIME_PICKER_INTERVAL = 30;
        NumberPicker minutePicker = timePicker.findViewById(Resources.getSystem().getIdentifier("minute", "id", "android"));
        minutePicker.setMinValue(0);
        minutePicker.setMaxValue((60 / TIME_PICKER_INTERVAL) + 28);
        List<String> displayedValues = new ArrayList<>();
        for(int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
            displayedValues.add(String.format("%02d", i));
        }
        minutePicker.setDisplayedValues(displayedValues.toArray(new String[0]));
    }

如果我运行上面的函数,它会显示以下错误:

java.lang.ArrayIndexOutOfBoundsException: length=2; index=30
        at android.widget.NumberPicker.updateInputTextView(NumberPicker.java:1990)
        at android.widget.NumberPicker.setDisplayedValues(NumberPicker.java:1554)

我需要提一下,我想将最小值设置为 0,将最大值设置为 30,否则应用程序将无法将数据正确保存到数据库中。 Bot 当我这样做时,它给了我我向你展示的错误。我在这里做错了什么?提前谢谢!

【问题讨论】:

  • 你可能想检查这个stackoverflow.com/a/13475169/3426825
  • @homerun 我已经尝试过您的解决方案,但它不起作用。它给了我一个类似的错误,我在问题中已经告诉过

标签: android intervals timepicker numberpicker


【解决方案1】:

发现你的问题出在循环构造上。

  • 循环构造:i = 0
  • 第一个循环:i += 30 (i = 30)
  • 第二个循环:i += 30 (i = 60)
  • 60 假 (exit loop)

因此,您的数组只有 2 个索引,并且您尝试访问不存在的内容。这就是为什么你会得到ArrayIndexOutOfBoundsException。编码愉快。

【讨论】:

  • 感谢您的回答。现在我知道根据您提供的最后一个答案是什么问题。但是,我不知道如何将条件放入 for 循环中以获取“00”和“30”值以显示在数字选择器中。你能帮我解决这个问题吗?
  • 我已经设法解决了这个问题。再次感谢您@homerun 的帮助!
猜你喜欢
  • 1970-01-01
  • 2020-12-15
  • 2020-03-03
  • 2019-09-28
  • 1970-01-01
  • 2013-12-11
  • 2019-04-12
  • 2018-05-14
  • 1970-01-01
相关资源
最近更新 更多