【问题标题】:How to modify ArrayList declared in another activity?如何修改在另一个活动中声明的 ArrayList?
【发布时间】:2017-07-11 13:12:59
【问题描述】:
我有一个ArrayList,我们称之为Activity A 中的列表。现在Activity A 调用Activity B 和Activity B 调用Activity C。在Activity C 中,我想在列表中插入一些元素,并在我回到Activity A 时反映这些变化。
我采取的方法
1) 将List 声明为公共静态,因此我可以在任何活动中访问它,但问题是当Activity A 被Activity C 调用时,列表会重新初始化
提前致谢。
【问题讨论】:
标签:
java
android
android-intent
arraylist
【解决方案1】:
这似乎不是一个好习惯。
您可以尝试这样做:
- 创建另一个类
ListContainer,其中包含您的静态 mList。
- 使用
ListContainer.getList()从任何活动中访问您的列表
- 在 getList() 内你必须做
return mList==null ? new ArrayList() : mList
我认为这是在列表中做任何你想做的事情的好方法:D
【解决方案2】:
您可以创建一个新类并将 ArrayList 放入其中而不是 Activity A。因此,当创建 Activity A 时,不会重新初始化 ArrayList。
【解决方案3】:
看看观察者模式,它可能会对你有所帮助。
如果您已订阅,您可以订阅活动 A 中的更改并从应用程序的任何部分推送它们。
这里还有一些有用的库:EventBus、Otto。
【解决方案4】:
如果您的流程来自 A -> B -> C 并且在从 C->B->A 进行更改之后,那么 startActivityForResult 并将结果设置在其中并将其传递将是最好的使用方法..
如果你想使用静态方法,那么它应该只在 Activity A 中初始化.. 并且静态数组列表不可能初始化一次以上.. 它总是需要单个内存分配并且只初始化一次..
【解决方案6】:
使用单例模型类制作数组列表在任何地方使用此数组列表并从任何类更改。只需调用类名 .arraylist;
otto 是你可以使用的另一个图书馆,但我建议你制作单例模型类
【解决方案7】:
您可以定义您的列表static。 static 变量由于某些问题不经常使用,但您可以将它用于少数(一个或两个)变量,但请谨慎使用。 static 变量可以与 ShoppingActivity.product_purchases 等类名一起使用。