将 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 启动它的人,以及有关每个选项含义以及搜索和过滤能力的有用信息。

当用户选择一个时,他们的选择会通过 MainActivityonActivityResult 覆盖返回到原始 ItemSelectorView。覆盖然后找出它正在响应的 ItemSelectorView 并转发它。

但是,我真的不喜欢 MainActivity 必须将自己插入到进程中才能从 ItemSelectorActivity 获得结果的方式。另外,如果在片段中使用 ItemSelectorView,尝试将信息转发到正确的视图时,事情会变得更加复杂。

因此,我改为将 ItemSelectorView 更改为 ItemSelectorFragment,它可以覆盖它自己的 onActivityResult,而不是它拥有的 activity,负责更新自己选定的结果。这意味着它现在基本上是完全独立的。

虽然这看起来效果很好——有了这个改变,用户只需要将 ItemSelectorFragment 放在他们布局的某个地方并设置可用和选定的项目——这里是一位经验丰富的 Android 开发人员说使用这样的片段是错误的,由于片段的开销,我应该留在视图中。

但是回到一个视图意味着我又不得不再次参与 MainActivity,这使得实际使用起来更加复杂。

那么像这样使用片段的技术缺点是什么?我认为这就是它们存在的全部意义。如果我应该使用视图,是否有更简单的方法从 ItemSelectorActivity 获得结果?

如果我没理解错的话,您的视图开始 activity(ItemSelectorView 开始 ItemSelectorActivity)。但是视图应该在 Android 中转储。他们应该显示,仅此而已。

因此视图永远不应启动 activity。一个视图也许可以包含一个项目列表,但这些项目应该是视图而不是别的。通常我们为此使用 Adapter:要显示的项目和为在屏幕上表示它们而创建的视图之间的中间人。

您可以查看 MVP 以正确的方式执行此操作。或者,如果您更喜欢 MVVM 和 android 架构。

为了回答您的问题,为您的用例使用片段是比视图更好的方法,而且根本没有太多开销。