首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓11 (仅限) FragmentManager崩溃- FragmentManager已被摧毁

安卓11 (仅限) FragmentManager崩溃- FragmentManager已被摧毁
EN

Stack Overflow用户
提问于 2020-09-21 22:27:13
回答 1查看 814关注 0票数 6

有没有人注意到Android 11的生命周期有什么明显的变化?

我的应用程序在安卓11之前的OSes上运行得很好,但在我的Pixel4上每次都会崩溃,并显示错误:

代码语言:javascript
复制
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Fragment host has been destroyed

在引擎盖下有没有其他人注意到的影响他们在Android 11上的应用程序的东西?

我使用了不同的文件,用于活动和片段。

我有一个调用onCreate的TreasureHuntActivity

代码语言:javascript
复制
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container, TreasureHuntMapFragment.newInstance(), "map-${index}").addToBackStack("map-${index}").commit()
fragmentManager.executePendingTransactions()

在它调用的TreasureHuntMapFragment

代码语言:javascript
复制
val intent = Intent(context, MainUnityActivity::class.java)
activity.startActivityForResult(intent, 33)
Handler().postDelayed({ activity.pushQuestionHintFragment() }, 1000)

回到TreasureHuntActivity中,它调用TreasureHuntQuestionHintFragment来显示

代码语言:javascript
复制
fun pushQuestionHintFragment() {
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.container, TreasureHuntQuestionHintFragment.newInstance(), "questionHintFragment-${specificQuestionId}").addToBackStack("questionHintFragment-${specificQuestionId}").commitAllowingStateLoss()
fragmentManager.executePendingTransactions()
}

这在之前的Android11上工作得很好,但之前提到的在11+上就不能工作了。通过进一步的调试,它将fragmentManager显示为null,这之前在TreasureHuntActivity中全局声明为var fragmentManager = supportFragmentManager

如果我在Pixel2(安卓的早期版本)上调试,fragmentManager不是null,而是BackStackEntry

我已经尝试将生命周期的依赖更新为2.2.0或2.3.0-alpha07,或者将片段更新为1.3.0,但仍然没有结果。

在调用pushQuestionHintFragment()时,在运行Android11时,fragmentManager仅为空。如果我调试,this.isDestroyed也是真的,但只在Android11上。

EN

回答 1

Stack Overflow用户

发布于 2020-11-19 00:04:23

使用supportFragmentManager而不是fragmentManager

代码语言:javascript
复制
fun pushQuestionHintFragment() {
    val fragmentTransaction = supportFragmentManager.beginTransaction()
    fragmentTransaction.replace(
                R.id.container,
                TreasureHuntQuestionHintFragment.newInstance(),
                "questionHintFragment-${specificQuestionId}").addToBackStack("questionHintFragment-${specificQuestionId}")
                       .commitAllowingStateLoss()
    supportFragmentManager.executePendingTransactions()
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63994323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档