#android #kotlin #android-fragments #android-activity #android-11
#Android #kotlin #android-фрагменты #android-активность #android-11
Вопрос:
Произошли ли какие-либо заметные изменения в жизненном цикле Android 11, которые кто-нибудь заметил?
Мое приложение отлично работает на операционных системах до Android 11, но на моем Pixel 4 каждый раз вылетает с ошибкой:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Fragment host has been destroyed
Есть ли что-нибудь под капотом, что кто-нибудь еще заметил, чтобы просто повлиять на их приложение на Android 11?
Я использую разные файлы для активности и фрагментов.
У меня есть TreasureHuntActivity
, который вызывает onCreate:
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container, TreasureHuntMapFragment.newInstance(), "map-${index}").addToBackStack("map-${index}").commit()
fragmentManager.executePendingTransactions()
В TreasureHuntMapFragment
ит-вызовах
val intent = Intent(context, MainUnityActivity::class.java)
activity.startActivityForResult(intent, 33)
Handler().postDelayed({ activity.pushQuestionHintFragment() }, 1000)
Вернувшись, TreasureHuntActivity
он вызывает TreasureHuntQuestionHintFragment
, чтобы показать
fun pushQuestionHintFragment() {
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container, TreasureHuntQuestionHintFragment.newInstance(), "questionHintFragment-${specificQuestionId}").addToBackStack("questionHintFragment-${specificQuestionId}").commitAllowingStateLoss()
fragmentManager.executePendingTransactions()
}
Это работает на pre Android 11, где оно работает отлично, как уже упоминалось, сейчас оно не работает на 11 . При дальнейшей отладке он отображается fragmentManager
как null, который ранее был объявлен как
var fragmentManager = supportFragmentManager
глобально в TreasureHuntActivity
Если я выполняю отладку на Pixel 2 (более ранняя версия Android), значение fragmentManager
не равно нулю и равно BackStackEntry
.
Я попытался обновить приличия до 2.2.0 или 2.3.0-alpha07 для жизненного цикла или фрагмента до 1.3.0 и все равно не испытал радости.
Значение fragmentManager
null только при запуске Android 11 при вызове pushQuestionHintFragment()
. Если я отлаживаю, this.isDestroyed
это тоже верно, но только на Android 11.
Ответ №1:
Используйте supportFragmentManager
вместо fragmentManager
fun pushQuestionHintFragment() {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(
R.id.container,
TreasureHuntQuestionHintFragment.newInstance(),
"questionHintFragment-${specificQuestionId}").addToBackStack("questionHintFragment-${specificQuestionId}")
.commitAllowingStateLoss()
supportFragmentManager.executePendingTransactions()
}