Android 在FragmentManager提交后执行函数

Android 在FragmentManager提交后执行函数,android,android-fragments,kotlin,Android,Android Fragments,Kotlin,我有一个工具栏,其中的文本在我的菜单中的某个项目被选中后更新 问题是,我在事务处理之后立即调用处理工具栏中标题的函数,如下所示: supportFragmentManager.beginTransaction() .replace(R.id.fragment,fragment) .addToBackStack(空) .commit() setTitle() 然而,当调用我的函数时,我得到的片段总是当前显示的片段,而不是新的片段 supportFragmentManager.fragments.

我有一个工具栏,其中的文本在我的菜单中的某个项目被选中后更新

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

supportFragmentManager.beginTransaction()
.replace(R.id.fragment,fragment)
.addToBackStack(空)
.commit()
setTitle()
然而,当调用我的函数时,我得到的片段总是当前显示的片段,而不是新的片段

supportFragmentManager.fragments.last()

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

由于您没有将片段添加到后堆栈中,因此无法使用内置的,因此您可以调用
在您提交事务或使用
commitNow()
方法而不是
commit()
执行相同操作后,使用
setTitle()
处理工具栏更改。如果您使用的是KTX扩展,则可以等待使用创建片段,而不是直接侦听片段管理器

首先确保在应用程序级别
build.gradle
中有
fragment ktx
依赖项:

dependencies {
    ...
    implementation 'androidx.fragment:fragment-ktx:1.2.1'
    ...
}
然后,您可以执行暂停执行,等待创建片段:

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

如果您不需要backstack,您可以使用
commitNow
同步执行事务。我正在使用带有addToBackStack的backstack(null)是活动中的工具栏(其中包含片段容器)?@Darshn是的,工具栏在主活动中。我实际上是在将我的片段添加到后台堆栈中。在这种情况下,您可以很容易地使用侦听器,在每次事务完成后(弹出或推送)都会调用该侦听器。只需注意所使用的back-stack标记,它对于堆栈的每个项都必须是唯一的。