首页 > 解决方案 > 使用片段管理器时的数据绑定

问题描述

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

这是我到目前为止的代码:

标签: androidkotlindata-bindingfragmentfragmentmanager

解决方案


我将尝试提供另一种方式来归档您正在查找的内容,同时给出一些简短的解释。我希望最终你能从中受益。

在你<data>离开的时候只有 theViewModel和 theAdapter

<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. 你可以把它写在一个单独的类中,然后把你所有@BindingAdapters的都放在里面:

object BindingAdapters {

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

}

这样您ViewPager的 ' 适配器将被自动设置。

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


推荐阅读