Очень странно. Я знаю. Это исполняемый код.
(Код в РЕДАКТИРОВАТЬ.)
После того, как я выберу время и дату и сделаю то же самое снова, предыдущий выходной текст отличается от этого выходного текста.
Обратите внимание, что пользовательская настройка имеет формат 24 часа.
В первый раз, когда это делается:
![Selecting datetime the first time!](https://i.stack.imgur.com/9tU83.png)
Вот как он выглядит после выполнения в первый раз (игнорируйте выделенное «лицо», то есть реализацию механизма поиска контактов):
![Looks fine for the first time, as expected](https://i.stack.imgur.com/zB1TT.png)
THEN, снова то же самое (клянусь, это второй раз, когда я делаю это, это может выглядеть так же):
![As expected for the second time](https://i.stack.imgur.com/UAqaw.png)
Но что это monstrosity?!
![Don't know what is happening here](https://i.stack.imgur.com/tzCWC.png)
Тосты подтверждают, что оба раза я вхожу в 24-часовое условие if, поэтому я думаю, что выбор правильного формата для дата в порядке. (Также обратите внимание, что, если бы это был 12-часовой формат, AM / PM был бы там, как предложено в коде, но его нет в выходных данных.)
Я не знаю, как это могло произойти , SimpleDateFormat
создается непосредственно перед использованием, поэтому возиться с ним где-либо еще невозможно, поэтому я не думаю, что это исходит от datePickerDialog
.
Какие-либо подсказки / предложения / идеи?
РЕДАКТИРОВАТЬ: По запросу, вот код адаптера. Я новичок, поэтому, пожалуйста, go спокойно для меня :) Соответствующий код находится в fun setDateTime()
class ContactAdapter(
private val context: Context,
private val contact_name: String?,
private val items: List<Contact>
) :
RecyclerView.Adapter<ContactAdapter.ViewHolder>() {
private val c = Calendar.getInstance()
fun createDatePicker(onSetDate: (DatePicker, Int, Int, Int) -> Unit) = DatePickerDialog(
context,
onSetDate,
c[Calendar.YEAR],
c[Calendar.MONTH],
c[Calendar.DAY_OF_MONTH]
)
fun createTimePicker(onSetTime: (TimePicker, Int, Int) -> Unit) = TimePickerDialog(
context,
onSetTime,
c[Calendar.HOUR],
c[Calendar.MINUTE],
DateFormat.is24HourFormat(context)
)
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
init {
setupAddButton()
setupGreetingTimeText()
}
private fun setDateTime() {
val datePicker = createDatePicker { _, year, month, date ->
c[Calendar.YEAR] = year
c[Calendar.MONTH] = month
c[Calendar.DAY_OF_MONTH] = date
val timePicker = createTimePicker { _, hour, minute ->
c[Calendar.HOUR] = hour
c[Calendar.MINUTE] = minute
itemView.txtGreetingTime.text = if (DateFormat.is24HourFormat(context)) {
Toast.makeText(context, "Chose 24-hour clause", Toast.LENGTH_SHORT).show()
SimpleDateFormat(
"dd mmm, yyyy 'at' HH:mm",
Locale.getDefault()
).format(c.time)
} else {
Toast.makeText(context, "Chose 12-hour clause", Toast.LENGTH_SHORT).show()
SimpleDateFormat(
"dd mmm, yyyy 'at' hh:mm aa",
Locale.getDefault()
).format(c.time)
}
}
// Do time picking stuff
timePicker.show()
}
// Do date picking stuff
datePicker.show()
}
private fun setupAddButton() {
itemView.addButton.setOnClickListener {
println("Attempted call to ${itemView.contactPhone.text}")
itemView.layoutTimingDetails.visibility =
if (itemView.layoutTimingDetails.visibility == View.VISIBLE) View.GONE else View.VISIBLE
}
}
private fun setupGreetingTimeText() {
itemView.txtGreetingTime.setOnClickListener {
it.txtGreetingTime.text = dateTimeToString()
}
}
fun setData(item: Contact, contact_name: String?) {
itemView.contactName.text = item.name
itemView.contactPhone.text = item.phone
itemView.contactEmail.text = item.email
if (contact_name != null)
itemView.contactName.highlightBackground(contact_name, Color.YELLOW)
}
}
override fun getItemCount(): Int = items.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.card_contact, parent, false)
)
override fun onBindViewHolder(holder: ViewHolder, position: Int) =
holder.setData(items[position], contact_name)
}
РЕДАКТИРОВАТЬ 2: Ранее я думал, что SimpleDateFormat был здесь виноват. Но на самом деле это TimePicker. Это как-то неправильно интерпретирует щелчок на 24-часовых кнопках и вместо этого регистрирует их 12-часовые кнопки в качестве входных данных.
Пример, если в первый раз я выбрал 18:30, то если я выбрал 6:30 в качестве время во второй раз, время генерируется еще 18:30. Однако если третий раз изменить на 18:30, то зарегистрированное время будет 6:30.