如何用 Android 数据绑定替换 androidx.fragment.app.FragmentContainerView 中的片段

How to replace fragment in androidx.fragment.app.FragmentContainerView with Android databinding

我当前的 Android 应用程序使用了数据绑定。

我在尝试将片段添加到 androidx.fragment.app.FragmentContainerView 时遇到问题。

我已经设法得到了我想要的效果,但是感觉方法不正确。

我不明白我哪里弄错了。

在我的 activity 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() 之后检查此方法 return 在 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)
}

它有我的片段集

我应该这样吗adding/re[在使用数据绑定时放置片段?

为什么我的片段 return 直到 postCreate()

才被编辑

我有一种感觉,因为一旦我提交了片段事务以将我的片段添加到 FragmentContainerView,布局仍然需要测量等。所以在 findFragmentById() 之前“一段时间”过去了return我添加的片段。

有没有我可以添加到 FragmentContainerView 的布局侦听器,以检测我的片段何时实际添加并变得可见?

Why doesnt my fragment get returned until postCreate()

Commit is asynchronous

is there a layout listener I can add to FragmentContainerView to detect when my fragment is actually added and becomes visible?

你为什么关心这个?