将结果从活动返回到特定视图的正确方法是什么?

时间:2017-09-27 17:56:42

标签: android android-fragments onactivityresult

Android新手。试图了解设计的技术缺点。

我有一个ItemSelectorView,其中包含availableItems个集合以及selectedItem个属性。后者在运行时与雪佛龙一起显示,让用户知道他们可以更改它。

功能方面,它类似于微调器,除了显示带有选项的弹出窗口,它启动第二个名为ItemSelectorActivity的活动,它显示{{1}中的所有可用项目。启动它的1}},以及有关每个选项含义的有用信息以及搜索和过滤的能力。

当用户选择一个时,他们的选择将通过ItemSelectorView的{​​{1}}覆盖行程返回原始ItemSelectorView。然后覆盖会确定哪个MainActivity响应并转发它。

但是,我真的不喜欢onActivityResult只是为了从ItemSelectorView获取结果而将自己插入到流程中的方式。另外,如果片段中使用了MainActivity,那么尝试将信息转发到正确的视图会变得更加复杂。

正因为如此,我改为ItemSelectorActivity改为ItemSelectorView,它可以覆盖自己的ItemSelectorView,而不是它自己的活动,负责用选定的结果更新自己。这意味着它现在基本上是完全独立的。

虽然这看起来非常有效 - 通过此更改,用户只需要将ItemSelectorFragment放置在布局中的某个位置并设置可用和选定的项目 - 一位资深的Android开发人员在这里说使用像这样的片段是错的,我应该留下一个观点,因为片段的开销。

但回到视图意味着我又要回到onActivityResult再次参与其中,这使得实际使用起来要复杂得多。

那么使用这样的片段的技术方面是什么?我认为这就是他们存在的原因。如果我应该使用视图,是否有更简单的方法从ItemSelectorFragment获得结果?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您的观点就是开始一项活动(ItemSelectorView开始ItemSelectorActivity)。但是应该在Android中转储视图。它们应该显示,仅此而已。

所以视图永远不应该开始活动。视图可以包含项目列表,但这些项目应该是视图而不是其他内容。通常我们使用Adapter:在要显示的项目和创建的视图之间的中间人,以在屏幕上表示它们。

你可以通过适当的方式调查MVP。或者可能是MVVM和Android架构,如果你更喜欢它。

要回答你的问题,为你的用例使用一个片段是一个更好的方法,然后一个视图,并没有那么多的开销。