微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 11仅FragmentManager崩溃-FragmentManager已被破坏

如何解决Android 11仅FragmentManager崩溃-FragmentManager已被破坏

是否有人注意到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()
}

这可以在Android 11之前的版本上正常运行,因为它在11+上现在无法正常运行。经过进一步的调试,它显示fragmentManager为null,之前已声明为null var fragmentManager = supportFragmentManager 全球TreasureHuntActivity

如果我在Pixel 2(Android的早期版本)上进行调试,则fragmentManager不为null,而是BackStackEntry

我曾尝试将生命周期或片段的格律更新为2.2.0或2.3.0-alpha07,将其更新为1.3.0,但仍然没有任何乐趣。

调用fragmentManager时,pushQuestionHintFragment()仅在Android 11运行时为null。如果我进行调试,则this.isDestroyed也适用,但仅适用于Android 11。

解决方法

使用supportFragmentManager代替fragmentManager

fun pushQuestionHintFragment() {
    val fragmentTransaction = supportFragmentManager.beginTransaction()
    fragmentTransaction.replace(
                R.id.container,TreasureHuntQuestionHintFragment.newInstance(),"questionHintFragment-${specificQuestionId}").addToBackStack("questionHintFragment-${specificQuestionId}")
                       .commitAllowingStateLoss()
    supportFragmentManager.executePendingTransactions()
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。