java在活动之间共享ArrayList
我在跨活动的Application
类中存储List
时遇到问题
在我的启动屏幕中,我正在从MySQL
数据库将数据加载到List
List
位于一个名为Rateit
的类中,该类extends Application
。我将其作为类变量执行:
public static List<String> masterCats;
在启动屏幕活动/课程中,我执行以下操作:
在{
Rateit.masterCats = new ArrayList<String>();
在加载数据的AsyncTask循环中,我执行以下操作:
Rateit.masterCats.add(cat);
cat
是来自数据库的列表项。我有Log.d
数据(cat
)和ListPosition来检查它是否被添加到List
中,并且它是
但是,我需要在下一个Activity
中获取相同的信息,并将其放入一个adapter
中。它返回的长度为0
我只是这样做:adapter = new MasterCatAdapter(getActivity(), Rateit.masterCats, tf);
为什么列表不能跨活动维护数据?这是因为它的static
吗?还有别的吗
(注意:我将很快在这里添加getter和setter方法!)
# 1 楼答案
正如@acc在他的评论中提到的,避免使用静态变量的模型。相反,我会这样做:
然后,在新的
Activity
的onCreate()
或任何地方,只需执行以下操作即可访问列表:@kicking莴苣在评论中也提到,如果用户离开
Activity
,则可以访问该文件。因此,在任何一个Activity
中,只要将其转换为逗号分隔的字符串并保存在SharedReferences中,如下所示:然后,如果希望在整个
Activity
生命周期中持久化列表,请在onCreate
或其他内容中访问此SharedReference# 2 楼答案
将列表保存在应用程序扩展类中是个好主意,您可以通过以下方法实现它
在应用程序类中声明如下列表,如
并为上述变量声明setter和getter方法
在装入器类中获取应用程序对象,如下所示
Application Application=(扩展应用程序类的YOurClassName)getApplication()
并将列表设置为如下所示
现在,您可以通过以下任何活动访问此列表
希望对你有帮助