将 activity 的结果 return 到特定视图的正确方法是什么?
What's the proper way to return a result from an activity to a specific view?
Android 的新手。试图了解设计的技术缺点。
我有一个 ItemSelectorView
,它有一个 availableItems
集合和一个 selectedItem
属性。后者在运行时与 V 形一起显示,让用户知道他们可以更改它。
在功能方面,它类似于微调器,除了它不会显示带有选项的弹出窗口,它会启动第二个 activity,称为 ItemSelectorActivity
,显示来自ItemSelectorView
启动它的人,以及有关每个选项含义以及搜索和过滤能力的有用信息。
当用户选择一个时,他们的选择会通过 MainActivity
的 onActivityResult
覆盖返回到原始 ItemSelectorView
。覆盖然后找出它正在响应的 ItemSelectorView
并转发它。
但是,我真的不喜欢 MainActivity
必须将自己插入到进程中才能从 ItemSelectorActivity
获得结果的方式。另外,如果在片段中使用 ItemSelectorView
,尝试将信息转发到正确的视图时,事情会变得更加复杂。
因此,我改为将 ItemSelectorView
更改为 ItemSelectorFragment
,它可以覆盖它自己的 onActivityResult
,而不是它拥有的 activity,负责更新自己选定的结果。这意味着它现在基本上是完全独立的。
虽然这看起来效果很好——有了这个改变,用户只需要将 ItemSelectorFragment
放在他们布局的某个地方并设置可用和选定的项目——这里是一位经验丰富的 Android 开发人员说使用这样的片段是错误的,由于片段的开销,我应该留在视图中。
但是回到一个视图意味着我又不得不再次参与 MainActivity
,这使得实际使用起来更加复杂。
那么像这样使用片段的技术缺点是什么?我认为这就是它们存在的全部意义。如果我应该使用视图,是否有更简单的方法从 ItemSelectorActivity
获得结果?
如果我没理解错的话,您的视图开始 activity(ItemSelectorView
开始 ItemSelectorActivity
)。但是视图应该在 Android 中转储。他们应该显示,仅此而已。
因此视图永远不应启动 activity。一个视图也许可以包含一个项目列表,但这些项目应该是视图而不是别的。通常我们为此使用 Adapter
:要显示的项目和为在屏幕上表示它们而创建的视图之间的中间人。
您可以查看 MVP 以正确的方式执行此操作。或者,如果您更喜欢 MVVM 和 android 架构。
为了回答您的问题,为您的用例使用片段是比视图更好的方法,而且根本没有太多开销。
Android 的新手。试图了解设计的技术缺点。
我有一个 ItemSelectorView
,它有一个 availableItems
集合和一个 selectedItem
属性。后者在运行时与 V 形一起显示,让用户知道他们可以更改它。
在功能方面,它类似于微调器,除了它不会显示带有选项的弹出窗口,它会启动第二个 activity,称为 ItemSelectorActivity
,显示来自ItemSelectorView
启动它的人,以及有关每个选项含义以及搜索和过滤能力的有用信息。
当用户选择一个时,他们的选择会通过 MainActivity
的 onActivityResult
覆盖返回到原始 ItemSelectorView
。覆盖然后找出它正在响应的 ItemSelectorView
并转发它。
但是,我真的不喜欢 MainActivity
必须将自己插入到进程中才能从 ItemSelectorActivity
获得结果的方式。另外,如果在片段中使用 ItemSelectorView
,尝试将信息转发到正确的视图时,事情会变得更加复杂。
因此,我改为将 ItemSelectorView
更改为 ItemSelectorFragment
,它可以覆盖它自己的 onActivityResult
,而不是它拥有的 activity,负责更新自己选定的结果。这意味着它现在基本上是完全独立的。
虽然这看起来效果很好——有了这个改变,用户只需要将 ItemSelectorFragment
放在他们布局的某个地方并设置可用和选定的项目——这里是一位经验丰富的 Android 开发人员说使用这样的片段是错误的,由于片段的开销,我应该留在视图中。
但是回到一个视图意味着我又不得不再次参与 MainActivity
,这使得实际使用起来更加复杂。
那么像这样使用片段的技术缺点是什么?我认为这就是它们存在的全部意义。如果我应该使用视图,是否有更简单的方法从 ItemSelectorActivity
获得结果?
如果我没理解错的话,您的视图开始 activity(ItemSelectorView
开始 ItemSelectorActivity
)。但是视图应该在 Android 中转储。他们应该显示,仅此而已。
因此视图永远不应启动 activity。一个视图也许可以包含一个项目列表,但这些项目应该是视图而不是别的。通常我们为此使用 Adapter
:要显示的项目和为在屏幕上表示它们而创建的视图之间的中间人。
您可以查看 MVP 以正确的方式执行此操作。或者,如果您更喜欢 MVVM 和 android 架构。
为了回答您的问题,为您的用例使用片段是比视图更好的方法,而且根本没有太多开销。