代码之家  ›  专栏  ›  技术社区  ›  tech_human

android kotlin-timepickerdialog以编程方式设置时显示不正确的时间

  •  0
  • tech_human  · 技术社区  · 5 年前

    我正在代码中设置一个默认时间,并希望将“时间选择器”对话框设置为用户单击它时的时间。下面是代码:

    startTimeButton?.setOnClickListener {
                val calendar = Calendar.getInstance()
                val timeSetListener = TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute ->
                    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay)
                    calendar.set(Calendar.MINUTE, minute)
                    startTimeButton?.text = SimpleDateFormat("HH:mm").format(calendar.time)
                    SharedPreferences.setStartTime(activity, startTimeButton?.text.toString())
                }
    
                val startTimeArray: List<String> = SharedPreferences.getStartTime(context).split(":")
                TimePickerDialog(activity, timeSetListener, calendar.get(startTimeArray[0].toInt()), calendar.get(startTimeArray[1].toInt()), true).show()
            }
    

    如果我的开始时间是09:00,则时间选择器对话框指向01:01,如果是17:00,则时间选择器对话框将崩溃,并出现“java.lang.ArrayIndexOutOfBoundsException:Length=17;Index=17”错误。

    我在这里做错什么了?

    1 回复  |  直到 5 年前
        1
  •  0
  •   CommonsWare    5 年前

    The get() function on Calendar 返回给定字段标识符的值。例子包括 calendar.get(Calendar.HOUR_OF_DAY) calendar.get(Calendar.MINUTE) .

    你似乎正在进入 获取() 小时和分钟为整数。这些不是字段标识符。

    我怀疑这更接近你想要的:

    TimePickerDialog(activity, timeSetListener, startTimeArray[0].toInt(), startTimeArray[1].toInt(), true).show()
    

    另外,请确保您正在处理配置更改。例如,使用 DialogFragment 展示你的 TimePickerDialog .