【发布时间】:2017-09-27 17:56:41
【问题描述】:
Android 新手。试图了解设计的技术缺点。
我有一个ItemSelectorView,它既有availableItems 集合,也有selectedItem 属性。后者在运行时与 V 形一起显示,让用户知道他们可以更改它。
在功能方面,它类似于微调器,除了不显示带有选项的弹出窗口外,它会启动名为 ItemSelectorActivity 的第二个活动,该活动显示启动它的 ItemSelectorView 中的所有可用项目,如以及有关每个选项的含义以及搜索和过滤功能的有用信息。
当用户选择一个时,他们的选择会通过MainActivity 的onActivityResult 覆盖返回给原始ItemSelectorView。然后覆盖确定它正在响应哪个ItemSelectorView 并将其转发。
但是,我真的不喜欢 MainActivity 必须将自己插入到流程中以从 ItemSelectorActivity 获取结果的方式。另外,如果在片段中使用了ItemSelectorView,那么将信息转发到正确的视图会变得更加复杂。
因此,我改为将ItemSelectorView 更改为ItemSelectorFragment,它可以覆盖自己的onActivityResult,使其负责使用所选结果更新自身,而不是其拥有的活动。这意味着它现在基本上是完全独立的。
虽然这似乎工作得很好——通过这种改变,用户只需将ItemSelectorFragment 放置在他们的布局中的某个位置并设置可用和选定的项目——这里一位资深的 Android 开发人员说使用这样的片段是错误的由于片段的开销,我应该留在视图中。
但是回到视图意味着我不得不再次让MainActivity 参与进来,这使得实际使用变得更加复杂。
那么使用这样的片段的技术缺点是什么?我认为这就是它们存在的全部意义所在。如果我应该使用视图,有没有更简单的方法可以从ItemSelectorActivity 获得结果?
【问题讨论】:
-
OnActivityResult 用于当您需要来自 ActivityB 的 ActivityA 信息时,如果您希望您的 ActivityB 本身是新鲜的,您可以在没有 onActivityResult 的情况下执行此操作
-
片段中还有一个onActivityResult。另外,如上所述,ActivityA 不需要结果。 ActivityA 中的视图可以。出于这个原因,ActivityA 甚至不需要知道发生了什么,并且在使用所描述的片段的情况下,也不需要。
-
我理解错了,你的意思是片段?如果是,那么您可以在没有 onActivityResult 的情况下执行此操作。
标签: android android-fragments onactivityresult