我曾经使用public static
个成员变量,以便起始Activity
能够读取前一个Activity
的值。我知道这不是一个好的做法,它涉及风险和限制,比如拥有当前Activity
的几个实例并从静态变量中获取错误的值。
现在我使用Parcelable
并传递Bundle中的参数,但有时候这是一种负担。例如,在我当前的项目中,我有一个ExpandableListView
,并且组/子项存储在Map<group name, List<child>>
中。此列表位于Fragment
中,位于TabHost
中的FragmentActivity
内。单击列表中的子项将启动具有相同结构的另一个FragmentActivity
(TabHost
和Fragment
内部)。从这个Fragment
您可以编辑孩子。当我需要通知列表孩子已经改变时,问题出现了。按照最佳做法,我决定使用Broadcast
将修改后的孩子发送到第一个Activity
,然后让它更新列表。
如果我使用Parcelable
变量而不是public static
,我只需要在列表中调用notifyDataSetChange()
来刷新,因为实际的对象实例在Map
已被修改。使用Parcelable
,即使对象相同,修改它时也是不同内存区域中的另一个变量。当第一个Activity
收到Broadcast
时,它需要遍历所有组中的所有子项,以检查它是否是同一个对象并将其自身替换为广播的Parcelable
我做错了什么?或者它应该是这样的?有了这样的问题,我真的很想走公共的静态方式:-P
Fragment Activity <----
| |
TabHost | |
| |
Fragment <--| |
|
Fragment Activity |
|
TabHost |
|
Fragment --------------
答案 0 :(得分:2)
从第一项活动开始,您可以startActivityForResult
。然后,您的第二个活动可以返回更新的数据集。然后,您的第一个活动可以将数据地图重新分配到onActivityResult
次选择的任何内容,您可以使用notifyDataSetChanged
。