我有一个工具栏,其中的文本在选择菜单中的项目后会更新。
问题是,我在事务处理后立即调用工具栏中处理标题的函数,如下所示:
supportFragmentManager.beginTransaction()
.replace(R.id.fragment, fragment)
.addToBackStack(null)
.commit()
setTitle()
但是,当调用我的函数时,得到的片段总是当前显示的片段,而不是新的片段。
supportFragmentManager.fragments.last()
我猜Fragments事务是在一个线程中进行的。我如何等到它完成后才执行我的函数呢?
3条答案
按热度按时间x6h2sr281#
如果您使用KTX扩展,您可以等待使用
LifecycleScope
创建片段,而不是直接监听片段管理器。首先,确保您的应用级别
build.gradle
中具有fragment-ktx
依赖关系:然后,您可以执行一个挂起的执行,等待创建片段:
yhuiod9q2#
由于您没有将片段添加到后栈,因此不能使用内置的
FragmentManager.OnBackStackChangedListener
,因此您可以在提交事务后立即调用executePendingTransactions()
,或者使用commitNow()
方法而不是commit()
来执行相同的操作,然后使用setTitle()
处理工具栏更改。pgx2nnw83#
我想我这么晚才回答你的问题,但它可以帮助那些想要同样解决方案的人: