android - fragment 尚未附加

标签 android kotlin fragment

阅读有关此异常的帖子后,我不明白我需要做什么来更正此错误。此外,我什至无法重现它...有时会在某些设备上发生这种情况,但我不明白如何...

我的日志:

Fatal Exception: java.lang.IllegalStateException
Fragment a has not been attached yet my.app.HostFragment.addFragment

主机 fragment 类:

fun addFragment(fragment: Fragment) {
        childFragmentManager.beginTransaction()
          .add(R.id.fragment_root_container, fragment)
          .addToBackStack(null)
          .commit()
}

主 Activity 类:

fun openNewChampionFragment() {
        val hostFragment = pagerAdapter.getItem(viewpager.currentItem) as HostFragment
        hostFragment.addFragment(ChampionFragment.newInstance())
}

ViewPager 适配器:

class ViewPagerAdapter(manager: FragmentManager) : FragmentStatePagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {

    private var fragments: MutableList<Fragment> = mutableListOf()

    fun addFragments(fragments: List<Fragment>) {
        this.fragments = fragments.toMutableList()
    }

    override fun getItem(position: Int): Fragment {
        return fragments[position]
    }

    override fun getCount(): Int {
        return fragments.size
    }

    fun clearStack(index: Int){
        (fragments[index] as HostFragment).clearAllStack()
    }
}

我总是从我的 MainActivity 调用带有新 fragment 实例的 addFragment(我不重复使用旧 fragment 的实例。)

哪个 fragment 没有附上?我的 HostFragment 或我要添加的新的。

最佳答案

您的应用程序崩溃是因为 FragmentStatePagerAdapter 的实现不正确。

// private var fragments: MutableList<Fragment> = mutableListOf() // <-- remove this line entirely

您不能在您的 Fragment*PagerAdapter 中保留一个 fragment 列表,因为系统会重新创建 fragment ,并且您将在该列表中调用永远不会真正添加到 FragmentManager。

你可以做的是将 FragmentStatePagerAdapter 切换为 FragmentPagerAdapter,然后你可以申请 App crash after activity has been killed in backgroundHow to get elements of fragments created by ViewPager in MainActivity? .

要重现您的崩溃,请参阅 Singleton object becomes null after app is resumed .

关于android - fragment 尚未附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58594982/

相关文章:

android - 如何为新 fragment 重用 fragment View

java - 像 Gmail 应用程序一样的 Android Studio 抽屉导航

java - 永远不会调用数据库 onUpgrade 方法

android - 将其他 Android 小部件添加到您的应用程序中

android - 如何观察协程流的 ContentProvider 变化

spring-mvc - 如何使用Spring MVC @RequestParam解析不同的ISO日期/时间格式

android - 无法使用 Android Retrofit 访问 JSON 中的数据

java - 如何使用 Kotlin 中的 Flowable.generate

android - 如何阻止后退按钮返回到 Activity 中打开的每个 fragment ?

android - 监听 Tab/Android 中的 Switch 状态变化