如何用 Android 数据绑定替换 androidx.fragment.app.FragmentContainerView 中的片段
Posted
技术标签:
【中文标题】如何用 Android 数据绑定替换 androidx.fragment.app.FragmentContainerView 中的片段【英文标题】:How to replace fragment in androidx.fragment.app.FragmentContainerView with Android databinding 【发布时间】:2022-01-08 06:02:55 【问题描述】:我当前的 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
的布局侦听器来检测我的片段何时实际添加并变得可见?
【问题讨论】:
【参考方案1】:为什么我的片段直到 postCreate() 才返回
Commit is asynchronous
是否有我可以添加到 FragmentContainerView 的布局侦听器来检测我的片段何时实际添加并变得可见?
你为什么关心这个?
【讨论】:
我还以为是这样的。我在乎,因为我认为我做错了什么。我没有意识到 commit() 不是即时的,我的一个简单错误以上是关于如何用 Android 数据绑定替换 androidx.fragment.app.FragmentContainerView 中的片段的主要内容,如果未能解决你的问题,请参考以下文章
如何用 ViewPager 中的另一个片段替换 Android 片段?