[英]Sharing an ArrayList Between Activities
我在跨活动的Application
类中存储List
时遇到问题。
在“启动画面”中,我正在将数据从MySQL
数据库加载到List
。
List
在名为Rateit
的类中,该类extends Application
。 我将其作为类变量进行处理:
public static List<String> masterCats;
在启动画面活动/类中,我这样做:
在onCreate
:
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方法!)
正如@ A--C在他的评论中提到的,请避免使用具有静态变量的模型。 相反,我会做这样的事情:
private void yourMethodWhereYouGetYourData(){
//get your data
ArrayList<String> masterCats = new ArrayList<String>();
masterCats.add(cat);
//Assuming you're doing this synchronously, once you've gotten your data just do:
Intent i = new Intent(this, YourActivity.class);
i.putStringArrayListExtra("MasterCats", masterCats);
startActivity(i);
}
然后,在新Activity
的onCreate()
或任何地方,只需执行以下操作即可访问列表:
getIntent().getStringArrayListExtra("MasterCats");
@KickingLettuce在评论中还提到,如果用户离开Activity
则保持可访问性。 因此,无论您要保存ArrayList的哪个Activity
,只需将其转换为逗号分隔的String并将其保存在SharedPreferences中,如下所示:
private void saveCats(){
//get your ArrayList from wherever (either as a global variable or pass it into the
//method.
StringBuilder sb = new StringBuilder();
for(int i = 0; i < masterCats.size(); i++){
if(i == masterCats.size() - 1)
sb.append(masterCats.get(i));
else
sb.append(masterCats.get(i)+",");
}
SharedPreferences.Editor prefsEditor =
PreferenceManager.getDefaultSharedPreferences(this).edit();
prefsEditor.putString("MasterCats", sb.toString()).commit();
//Note: in API 11 and beyond you can store a Set of Strings in SharedPreferences, so
//if you are only targeting API 11+ you could do:
Set<String> masterCatsSet = new LinkedHashSet<String>(); //<--using LinkedHashSet to preserve order
masterCatsSet.addAll(masterCats);
prefsEditor.putStringSet("MasterCats",masterCatsSet).commit();
}
然后,在您的onCreate
访问此SharedPreference,或者如果您希望在Activity
生命周期中保留该列表,则可以进行访问。
将列表保存在Application扩展类中是个好主意,您可以通过以下方法实现
在您的App类中声明清单如下
public static List<String> masterCats;
并声明上述变量的setter和getter方法
public List getMasterCatsList()
{
return masteCats;
}
public Void setMasterCatsList(List list)
{
masteCats=list;
}
在Loader类中按以下方式获取应用程序对象,如下所示
应用程序应用程序=(扩展应用程序类的YOurClassName)getApplication();
并设置列表如下
application.setMasterCatsList(List list);
现在您可以通过以下任何活动访问此列表
Application application = (YOurClassName That Extends Application class) getApplication();
List l = application.getMasterCatsList();
希望对您有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.