Android-Kotlin - TimePickerDialog 在以编程方式设置时显示不正确的时间

Android-Kotlin - TimePickerDialog shows incorrect time when set programatically

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

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" 错误。

我做错了什么?

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

您似乎将 get() 小时和分钟作为整数传递。这些不是字段标识符。

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

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

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