首页 > 解决方案 > FragmentManager 提交后执行函数

问题描述

我有一个带有文本的工具栏,该工具栏在我的菜单中的一个项目被选中后会更新。

问题是我在我的事务之后立即调用处理工具栏中标题的函数,如下所示:

supportFragmentManager.beginTransaction()
        .replace(R.id.fragment, fragment)
        .addToBackStack(null)
        .commit()
setTitle()

但是,当我的函数被调用时,我得到的片段始终是当前显示的片段,而不是新的片段。

supportFragmentManager.fragments.last()

我猜碎片交易发生在一个线程中。我如何等到它完成才能执行我的功能?

标签: androidandroid-fragmentskotlin

解决方案


如果您使用的是 KTX 扩展,则可以等待创建片段,LifecycleScope而不是直接听片段管理器。

首先确保您fragment-ktx的应用程序级别具有依赖性build.gradle

dependencies {
    ...
    implementation 'androidx.fragment:fragment-ktx:1.2.1'
    ...
}

然后您可以执行暂停执行,等待您的片段被创建:

supportFragmentManager.beginTransaction()
        .replace(R.id.fragment, fragment)
        .addToBackStack(null)
        .commit()
fragment.lifecycleScope.launchWhenCreated { 
    setTitle()
}

推荐阅读