gpt4 book ai didi

android - Parcelable 与公共(public)静态。安卓模式

转载 作者:行者123 更新时间:2023-12-02 01:47:36 24 4
gpt4 key购买 nike

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

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

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

我做错了什么?或者它应该是这样的?对于这类问题,我真的很想采用公共(public)静态方式:-P


PS:好像是这样的。长箭头是Broadcast,短箭头是Activity告诉Fragment替换Map中的child并刷新列表。

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

最佳答案

从您的第一个 Activity 开始,您可以startActivityForResult。然后,您的第二个 Activity 可以返回更新后的数据集。然后,您的第一个 Activity 可以将数据映射重新分配给 onActivityResult 拾取的任何内容,您可以使用 notifyDataSetChanged

关于android - Parcelable 与公共(public)静态。安卓模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com