例如,我的EditProjectFragment
包含很少的元素:
TextView
(项目名称)ColorPicker
(项目颜色)Spinner
(项目类型)让我们看看:
似乎是ViewState
的责任。例如,当用户选择颜色时,View
会调用presenter.onProjectColorPicked(color)
。然后,Presenter
将调用view.setProjectColor(color)
。或者View
应该直接更新ViewState
,如果不需要,可以不调用Presenter
吗?
另一个例子。用户在EditNoteFragment中添加照片。用户选择照片(presenter.pickPhoto()
) - > presenter.addPhoto(photo)
已致电并通知View
将照片添加到ViewState
并显示。
View
应该自行更新Note
对象吗?它应该由Presenter完成吗?在第一种情况下,它意味着ViewState
将提供将由View使用的getNote()/setNote(note)
方法。我应该通过View.setNote(note)
方法更新Note-reference来复制它吗?第二种情况意味着我可能应该将Note
对象存储在Presenter
中,只更新View
而不会在其中传递Note
。但这看起来是错误的方式。
换句话说: View
必须在没有Presenter
帮助的情况下做什么(向Note
对象添加照片?)以及它有什么用处(按钮点击等)?
答案 0 :(得分:2)
Viewstate旨在用于表示View中的不同状态。即视图显示加载指示器。所以我们可以说视图处于"加载状态"。所以无论什么时候#34;状态"更改通常涉及演示者,因为演示者负责协调视图状态。问题是:你如何定义国家?没有银弹。
我不认为玩像
这样的乒乓球比赛是有意义的presenter.onProjectColorPicked(color)
view.setProjectColor(color)
除非你说它归结为这样的模型(业务逻辑):
presenter.onProjectColorPicked(color)
model.setColor(color)
view.setData(newModelWithChangedColor)
一般情况下:视图只是显示(通过演示者)"模型的当前状态"是
ViewState
只是一个小帮手,以稍微方便的方式处理屏幕方向更改和处理死亡(与传统的onSaveInstanceState(Bundle)
实现相比)。
所以问问自己:你的"模型"的状态是什么。通常,视图的状态与"模型"的状态相同。
在第一个例子中,似乎是颜色选择器和微调器的问题是不能在内部保存拾取的东西。因此,在onSaveInstanceState()
中为picker / spinner手动执行此操作是android团队建议的默认方式。因此,如果您只是想使用ViewState
功能不使用onSaveInstanceState()
,因为您发现使用ViewState更方便,那么这也很好,尽管它不是ViewState的用途。