【问题标题】:How to reduce LiveData observers code in Fragments?如何减少片段中的 LiveData 观察者代码?
【发布时间】:2020-05-02 14:13:52
【问题描述】:

我正在重构我们的 android 代码,但无法处理以下问题。我们的一些片段包含过多的代码(约 1000 行代码)。

  1. 我们可以从后端动态更新我们的布尔标志。
  2. 我们的片段应根据来自后端的布尔标志处理额外的 UI

我遵循 ViewModel + LiveData 样式来处理我们的 UI 逻辑。基本上,我们的一些 Fragment 从我们的 VM 中观察到 5-7 个不同的 LiveData observables。每个 LiveData 观察者产生 20-100 行代码。它们处理颜色变化、不同对话框的外观、小吃店或底片等。

现在我想减少 Fragments 中的代码,但我不知道应该如何解决这个问题。

我立即想到的一个解决方案是使用继承。例如,我们的片段将扩展 FragmentFeature2->FragmentFeature3->FragmentFeature4->FragmentFeature5。他们都会在 onViewCreated 中观察特定的 LiveData。

不过,我认为继承似乎是一个 hacky 解决方案,并且会在未来引发更多问题。理想情况下,我希望有以下场景:

我们的片段会为每个特征创建一个不同的类,它会充当特定 LiveData 的管理器。问题是你不能在一个类中观察 LiveData,没有视图生命周期所有者。也许我遗漏了一些东西,有人可以纠正我:)

【问题讨论】:

    标签: android-fragments android-lifecycle android-livedata android-viewmodel


    【解决方案1】:

    根据您必须在片段中编写大量代码的原因,可能会有不同的方法。如果您将一些逻辑应用于观察到的数据,例如 if 语句等,您应该将您的数据提供给片段是可呈现的形式。对于这种情况,您可以使用实时数据运算符通过使用地图、中介实时数据等以反应方式操作数据,以便您可以将值直接设置为视图。另一种情况是,如果您已经有一个简单的数据在视图中,但设置它们需要很多代码行。为此,您可以创建 customViews 或 customComponents 来处理数据,以便将字段设置行移至更合适的位置。如果这两种解决方案都无法解决您的问题,您可以在视图模型和视图之间创建一个演示者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多