可包裹与公共静态.安卓模式



我曾经使用public static成员变量,以便起始Activity能够读取前一个Activity的值。我知道这不是一个好的做法,它涉及风险和限制,例如拥有当前Activity的多个实例并从静态变量中获取错误的值。

现在我使用 Parcelable 并在 Bundle 中传递参数,但有时这是一种负担。例如,在我当前的项目中,我有一个ExpandableListView,组/子存储在Map<group name, List<child>>中。此列表位于FragmentActivity TabHost内的Fragment中。单击列表中的子项将启动另一个具有相同结构的FragmentActivity(TabHost和内部Fragment(。从这个Fragment您可以编辑子项。当我需要通知列表孩子已更改时,问题就来了。遵循最佳实践,我决定使用Broadcast将修改后的子级发送到第一个Activity,并让它更新列表。

如果,而不是

Parcelable,我会使用一个public static变量,我只需要在列表中调用notifyDataSetChange()来刷新,因为Map中的实际对象实例被修改了。使用Parcelable,即使对象相同,修改时也是不同内存区域中的不同变量。当第一个Activity收到Broadcast时,它需要遍历所有组中的所有子对象,以检查它是否是同一个对象,并将自己替换为广播Parcelable

我做错了什么?还是应该是这样的?对于这种问题,我真的很想走公共静态的方式:-P


PS:像这样。长箭头是广播,短箭头是活动,告诉片段替换地图中的子项并刷新列表。

Fragment Activity  <----
             |         |
TabHost      |         |
             |         |
Fragment  <--|         |
                       |
Fragment Activity      |
                       |
TabHost                |
                       |
Fragment  --------------

从您的第一个活动中,您可以startActivityForResult .然后,第二个活动可以返回更新的数据集。然后,您的第一个活动可以将数据映射重新分配给选取的任何onActivityResult,您可以使用notifyDataSetChanged

最新更新