gpt4 book ai didi

android - 数据绑定(bind) : Pass LiveData as is to BindingAdapter and observe it using a LifecycleOwner

转载 作者:行者123 更新时间:2023-12-04 14:45:38 24 4
gpt4 key购买 nike

我想通过 LiveData至于 BindingAdapter .

BindingAdapter里面我想做一个Transformations.map并显示用户可以选择的不同选项,并在单击时使用相同的 LiveData 发送回结果.

为了观察LiveDataBindingAdapter我需要访问 LifecycleOwner ,理想情况下是 fragment View 。如果我想调用.observe,我需要那个在 liveData 上或设置 LifecycleOwner关于我在 BindingAdapter 中创建的新绑定(bind).

知道我该怎么做吗?

最佳答案

首先,我想建议您不要走在 BindingAdapter 中放置过多业务逻辑的道路。 s。除了使用绑定(bind)器来简单地设置样式属性是一种好习惯之外,我个人还看到了在适配器中放置太多逻辑造成的spaghetti-code 灾难。这是一个非常粗略的做法,因为每次实时数据更改时,都会为监听绑定(bind)的每个元素运行代码,因此您的逻辑会变得非常忙碌,非常快,并且您的应用程序性能也会迅速下降。

话虽如此,我认为您不应该传入 LiveData进入您的绑定(bind),而不是 Object E保存在您的实时数据中。这样您就可以:

  1. 将您的工作保存在两个都有 LifecycleOwner 的 fragment 中并且是观察变化的推荐方式
  2. 输入您的LiveData以您的 Transformation 的结果为例和
  3. 通过绑定(bind)直接接收它,在 UI 中显示它

这样,您的适配器只有显示结果/结果的逻辑,并且所有工作都由 fragment 正确处理。


ViewModel 实现

如果您想更进一步,遵循 Google 推荐的架构组件,我建议您将逻辑放在 ViewModel 中(如果您遵循 MVVM 模式)并完全避免使用 fragment .您将放置 LiveData viewModel 中的变量(比如 var itemColor: LiveData<Int> = MutableLiveData<Int>(R.color.colorPrimary) ),通过 xml 将其连接到您的绑定(bind)即

app:showColor="@{viewModel.itemColor}"

并将转换的所有逻辑放在 viewModel 中的一个函数中。将值设置为 itemColor会直接将值发送到您的绑定(bind)适配器( showColor ),您可以根据需要使用该值,甚至无需触摸 fragment 或观察变量!

注意:请记住将生命周期所有者设置为 fragment 内的绑定(bind),如下所示:binding.lifecycleOwner = this ,否则适配器将不会监听变化。

我希望这会有所帮助,帕诺斯。

关于android - 数据绑定(bind) : Pass LiveData as is to BindingAdapter and observe it using a LifecycleOwner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58969966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com