События не обновляются должным образом при возврате из DayDetails в CalendarActivity в приложении календаря.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 События не обновляются должным образом при возврате из DayDetails в CalendarActivity в приложении календаря.

Сообщение Anonymous »

Я работаю над приложением-календарем, в котором события отображаются по номеру дня. Когда я нажимаю на событие, открывается действие DayDetails, где я могу добавить новое событие. Проблема возникает, когда я перехожу из DayDetails обратно в CalendarActivity.
Вот последовательность действий:
  • События отображаются правильно в CalendarActivity.
  • При нажатии на событие происходит переход к DayDetails, где я могу просмотреть или добавить дополнительные события.
  • После добавления события в AddEvent я возвращаюсь назад в DayDetails, и он показывает оба.
  • Проблема возникает, когда я возвращаюсь в CalendarActivity, нажимаю на тот же день (который имеет два события), а затем возвращаюсь в DayDetails.
  • На этом
    этапе отображается только событие по умолчанию, а вновь добавленное событие
    исчезает.
    Я убедился, что правильно обновляю список событий, когда возвращаюсь из DayDetails в CalendarActivity.
    Я использовал onActivityResult() в DayDetails для обновления данных, но новое событие не появляется, когда я возвращаюсь.
CalendarActivity вызывает DayDetails

Код: Выделить всё

fun openDayDetails(selectedDay: String, eventTitles: ArrayList, eventNotes: ArrayList) {
val intent = Intent(this, DayDetailsActivity::class.java)
intent.putExtra("SELECTED_DAY", selectedDay)
intent.putExtra("MONTH_YEAR", SimpleDateFormat("MMMM yyyy", Locale.getDefault()).format(calendar.time))
intent.putStringArrayListExtra("EVENT_TITLES", eventTitles)
intent.putStringArrayListExtra("EVENT_NOTES", eventNotes)
startActivityForResult(intent, 1001)
}
DayDetails вызывает AddEvent

Код: Выделить всё

val intent = Intent(this, AddEventActivity::class.java)
startActivityForResult(intent, 1001)
AddEvent возвращает данные в DayDetails

Код: Выделить всё

val title = titleEditText.text.toString()
val note = noteEditText.text.toString()
val resultIntent = Intent()
resultIntent.putExtra("EVENT_TITLE", title)
resultIntent.putExtra("EVENT_NOTE", note)
setResult(Activity.RESULT_OK, resultIntent)
finish()
OnActivityResult из DayDetails

Код: Выделить всё

if (requestCode == 1001 && resultCode == RESULT_OK) {
val title = data?.getStringExtra("EVENT_TITLE") ?: ""
val note = data?.getStringExtra("EVENT_NOTE") ?: ""
val rawDateText = dayTextView.text.toString()  // "5, November 2024"
val inputFormat = SimpleDateFormat("d, MMMM yyyy", Locale.getDefault())
val outputFormat = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault())

// "dd-MM-yyyy"
val date = inputFormat.parse(rawDateText)?.let { dateObject ->
outputFormat.format(dateObject)
} ?: ""
events.add(Event(date, title, note))
updateEventList()

val resultIntent = Intent()
resultIntent.putParcelableArrayListExtra("UPDATED_EVENTS", ArrayList(events))
setResult(Activity.RESULT_OK, resultIntent)
}
OnActivityResult из CalendarActivity

Код: Выделить всё

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 2 && resultCode == Activity.RESULT_OK) {
val updatedEvents = data?.getParcelableArrayListExtra("UPDATED_EVENTS")
if (updatedEvents != null) {
events = updatedEvents.toMutableList()
(calendarGridView.adapter as? CalendarAdapter)?.updateEvents(events)
}
}
}
Вот как я показываю события при первом открытии CalendarActivity

Код: Выделить всё

calendar = Calendar.getInstance()
updateCalendar()
Обновить календарь

Код: Выделить всё

private fun updateCalendar() {
val monthFormat = SimpleDateFormat("MMMM yyyy", Locale.getDefault())
monthTextView.text = monthFormat.format(calendar.time)
val daysInMonth = getDaysInMonth(calendar)
val adapter = CalendarAdapter(this, daysInMonth, calendar, events)
calendarGridView.adapter = adapter
adapter.notifyDataSetChanged()
}
В чем может быть причина проблемы и как ее устранить?

Подробнее здесь: https://stackoverflow.com/questions/791 ... activity-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»