android - FragmentManager 提交后执行函数
问题描述
我有一个带有文本的工具栏,该工具栏在我的菜单中的一个项目被选中后会更新。
问题是我在我的事务之后立即调用处理工具栏中标题的函数,如下所示:
supportFragmentManager.beginTransaction()
.replace(R.id.fragment, fragment)
.addToBackStack(null)
.commit()
setTitle()
但是,当我的函数被调用时,我得到的片段始终是当前显示的片段,而不是新的片段。
supportFragmentManager.fragments.last()
我猜碎片交易发生在一个线程中。我如何等到它完成才能执行我的功能?
解决方案
如果您使用的是 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()
}
推荐阅读
- c# - 更新面板内的文件上传控件
- javascript - 我想将 php 变量中的值存储到其他具有 javascript 函数的文件中
- angular - ionic 3 角度数据不会动态变化
- r - rvest 中的动态变量名
- android - Eventbus onMessageEvent 没有被调用
- reactjs - ant design中对dataSource执行过滤功能后获取组件表中过滤后的数据
- github - 传输 repo 后丢失写访问权限
- javascript - chart.js 无法在 django 的浏览器中工作。模板和静态文件夹设置没有错误
- php - blueimp jquery 文件上传 - 使用标题等数据输入重命名文件名
- javascript - 如何登录 Puppeteer?