gpt4 book ai didi

android - Presenter/View/ViewState 关系

转载 作者:太空狗 更新时间:2023-10-29 13:11:45 25 4
gpt4 key购买 nike

例如,我有EditProjectFragment,其中包含几个元素:

  • TextView(项目名称)
  • ColorPicker(项目颜色)
  • Spinner(项目类型)

让我们看看:

  1. 项目名由TextView自己还原
  2. 谁必须存储项目的颜色?
  3. 谁必须存储微调器的值?

这似乎是 ViewState 的职责。例如,当用户选择颜色时,View 调用 presenter.onProjectColorPicked(color)。然后,Presenter 将调用 view.setProjectColor(color)。或者 View 应该直接更新 ViewState,如果不需要则不调用 Presenter


另一个例子。 用户在 EditNoteFragment 中添加照片。用户选择照片(presenter.pickPhoto()) -> presenter.addPhoto(photo) 调用并通知View 添加照片到 ViewState&显示它。View 应该自己更新 Note 对象吗?应该由 Presenter 完成吗?在第一种情况下,它意味着 ViewState 将提供诸如 getNote()/setNote(note) 之类的方法供 View 使用。我应该通过在 View.setNote(note) 方法中更新它来复制 Note-reference 吗?第二种情况意味着我可能应该将 Note 对象存储在 Presenter 中,并且只更新 View 而无需在其中传递 Note .但它看起来像一个错误的方式。


换句话说:如果没有 Presenter 的帮助,View 必须做什么(将照片添加到 Note对象?)和它有什么关系(点击按钮等)?

最佳答案

Viewstate 旨在用于表示 View 中的不同状态。即 View 正在显示加载指示器。所以我们可以说 View 处于“加载状态”。因此,每当“状态”发生变化时,通常都会涉及演示者,因为演示者有责任协调 View 状态。问题是:你如何定义状态?没有 Elixir 。

我不认为像这样玩乒乓球有什么意义

  1. presenter.onProjectColorPicked(颜色)
  2. view.setProjectColor(颜色)

除非,你说它像这样归结为模型(业务逻辑):

  1. 查看调用 presenter.onProjectColorPicked(color)
  2. Presenter 调用 model.setColor(color)
  3. 模型通知演示者(通过观察者模式)模型已更改
  4. Presenter 调用包含新颜色的 view.setData(newModelWithChangedColor)

一般来说: View 只是(通过演示者)显示“模型”的当前状态。

ViewState 只是一个小 helper ,以更方便的方式处理屏幕方向变化和进程死亡(与传统的 onSaveInstanceState(Bundle) 实现相比)。

所以问问自己:你的“模型”的状态是什么。通常, View 的状态与“模型”的状态相同。

在第一个例子中,似乎是颜色选择器和旋转器的问题,没有在内部保存选择的东西。因此,在 onSaveInstanceState() 中为选择器/微调器手动执行此操作是 android 团队推荐的默认方式。所以,如果你只是想使用 ViewState 特性而不使用 onSaveInstanceState() 因为你发现使用 ViewState 更方便,那么这也很好,虽然它不是ViewState 的确切用途。

关于android - Presenter/View/ViewState 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811358/

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