Я видел много вопросов и ответов о воссоздании текущей активности после изменения ночного режима приложения, но я ничего не видел о том, как обновить активность заднего стека.
Скажем, у меня есть бэкстэк A> B> C. Действие C позволяет изменить ночной режим, позвонив AppCompatDelegate.setDefaultNightMode()
. После этого вызова текущее действие (C) может обновить свою тему с помощью delegate.applyDayNight()
или recreate()
.
Однако, когда пользователь возвращается к B или A, действия по-прежнему используют «старый» режим, дневной или ночной.
Я попытался добавить в Activity что-то подобное:
override fun onResume() {
super.onResume()
delegate.applyDayNight()
}
Но вроде не работает.
Я сделал несколько попыток исправить это:
Одна из идей - полностью воссоздать backstack, как предложено здесь или здесь, но поскольку бэкстек не статичен, для меня это невозможно.
Другая идея - иметь класс, который обрабатывает изменение ночного режима и предоставляет LiveData. Каждое действие будет прослушивать LiveData для изменения режима и вызывать recreate()
. Однако мы застряли в бесконечном цикле, потому что Activity будет воссоздавать сразу после начала прослушивания LiveData.
Мне трудно поверить, что я первый, кто пытается обновить Activity из backstack после смены ночного режима. Что я пропустил?
Спасибо!