使用片段管理器时的数据绑定

Data binding while using fragment manager

我最近开始在 Android 中学习数据绑定,我了解基础知识,但是当我尝试进行一些更复杂的数据绑定时,例如视图寻呼机与 viewpager 适配器的数据绑定(使用片段管理器) 我不完全理解如何使用视图的片段管理器(在我的例子中是一个片段,我使用的是子片段管理器)。 我找到了一些不完整的示例和解决方案,但似乎没有任何效果。

这是我目前的代码:

我将尝试提供另一种方法来存档您正在寻找的内容,同时给出一些简短的解释。最后希望大家能从中有所收获

在你的 <data> 中只留下 ViewModelAdapter

<data>

    <variable
        name="viewModel"
        type=".HomeViewModel" />

    <variable
        name="adapter"
        type=".HomeViewPagerAdapter" />

</data>

那些 <variable .../> 值需要设置。您可以使用 binding 变量来做到这一点,例如:

# inside onCreate
binding.viewModel = viewModel
binding.adapter = HomeViewPager(context, fm)

ViewModel 不应该负责创建适配器,更不用说对 Android 组件(如上下文或片段管理器)的了解,尽量使其依赖性至少与 Fragment/Activity 的具体事物保持一致.如果这是它目前正在做的唯一事情,您可以安全地摆脱它。

现在,对于 @BindingAdapter 我建议你把它放在里面并用 @JvmStatic 注释。你可以把它写在一个单独的 class 中,然后把你所有的 @BindingAdapters 放在里面:

object BindingAdapters {

    @JvmStatic
    @BindingAdapter("adapter")
    fun ViewPager.bindAdapter(adapter: HomeViewPagerAdapter) {
         this.adapter = adapter
    }

}

您的 ViewPager 的适配器将自动设置。

但是,我认为这不值得。您已经在片段中引用了 ViewPager,您可以在那里设置 adapter