android - 为什么commitNow 不将片段设置为null?
问题描述
我试图commitNow
用来确保片段事务是同步的。但是,经过我的测试,我发现由于某种原因commitNow
并没有立即删除碎片。
我添加了一个 postDelayed 100 毫秒的处理程序,并且片段仍然不为空。之后,我更改postDelayed
为 1000 毫秒,最后,片段为空。
如何在我调用后立即确保片段为空commitNow
?我试图添加supportFragmentManager.popBackStack()
,但没有帮助。
如果无法立即使片段为空,在添加相同片段之前,如何检查该片段是否不再在堆栈中?
更新
我发现如果我删除了setCustomAnimations
,那么交易确实会立即发生。我如何观察何时setCustomAnimations
完成?
val fragment = supportFragmentManager.findFragmentByTag(DEMO_FRAGMENT)
if (fragment != null) {
Log.d("test", "DEMO_FRAGMENT is not null")
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.setCustomAnimations(R.anim.custom_fade_in, R.anim.custom_fade_out)
.remove(fragment).commitNow()
supportFragmentManager.popBackStack();
Log.d("test", "is fragment null:${supportFragmentManager.findFragmentByTag(DEMO_FRAGMENT) == null}")
Handler().postDelayed({
Log.d("test", "is fragment null:${supportFragmentManager.findFragmentByTag(DEMO_FRAGMENT) == null}")
}, 1000)
}
}
解决方案
为此,您必须使用popBackStackImmediate()
. 更多信息在这里
推荐阅读
- javascript - 如何从 jQuery.param() 方法形式化的 location.search 中获取对象?
- python-3.x - ModuleNotFoundError:在 VScode 上没有名为“docx”的模块,但在 Python 本身中没有
- html - Firefox 输入类型时间 text-align: center
- java - 在Java(Android Studio)中将解析对象转换为自定义对象数组
- php - 如何使用 php foreach 读取 json 数组?
- hibernate - 为 Spring 数据中的本机查询设置 work_mem
- spring-boot - Spring rabbitmq 任务队列并发
- python - 为什么我的理解列表不起作用?
- python - 如何使用户输入更改布尔值?
- javascript - 在 React 中加载内部图像的问题