我当前的Android应用程序使用数据绑定。
我在尝试向androidx.fragment.app.FragmentContainerView
添加片段时遇到问题。
我已经设法达到了我想要的效果,但我觉得这不是正确的方法。
我不明白我在哪里犯了错误。
在我的活动onCreate
方法中,我执行此代码以设置所需的片段
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
if (savedInstanceState == null) manageFragment()
}
其中manageFragment()
函数类似于该
private fun manageFragment() {
val myFragment = MyFragment.instance()
when {
(currentFragment == null) -> supportFragmentManager
.beginTransaction()
.replace(R.id.my_fragment_container, myFragment)
.commit()
(currentFragment is MyFragment) -> doNothing()
else -> supportFragmentManager
.beginTransaction()
.replace(R.id.my_fragment_container, myFragment)
.commit()
}
}
当我在manageFragment()
之后检查时,此方法在onCreate()
中返回null
supportFragmentManager.findFragmentById(R.id.my_fragment_container)
然而,当我在onPostCreate()
中调用相同的方法时
override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState)
currentFragment = supportFragmentManager.findFragmentById(R.id.my_fragment_container)
}
它有我的碎片集
当使用数据绑定时,我应该这样添加/重新放置片段吗?
为什么我的碎片要到postCreate()
才能返回
我有一种感觉,因为一旦我提交了碎片事务来将我的碎片添加到FragmentContainerView
,布局仍然需要测量等等;一段时间";在findFragmentById()
可以返回我添加的片段之前已经过去了。
是否有一个布局侦听器可以添加到FragmentContainerView
中,以检测我的片段何时被实际添加并可见?
为什么我的片段直到postCreate((才返回
Commit是异步
是否有一个布局侦听器可以添加到FragmentContainerView中,以检测我的片段何时实际添加并可见?
你为什么关心这个?