Parcelable与public static。 Android模式

时间:2014-07-09 08:47:21

标签: android design-patterns android-fragments android-tabhost parcelable

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

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

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

我做错了什么?或者它应该是这样的?有了这样的问题,我真的很想走公共的静态方式:-P


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

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

1 个答案:

答案 0 :(得分:2)

从第一项活动开始,您可以startActivityForResult。然后,您的第二个活动可以返回更新的数据集。然后,您的第一个活动可以将数据地图重新分配到onActivityResult次选择的任何内容,您可以使用notifyDataSetChanged