我遇到了在List
课程中存储Application
跨活动的问题。
在我的启动画面中,我将数据从List
数据库加载到MySQL
。
List
位于名为Rateit
的{{1}}类中。我在它中作为类变量执行此操作:
extends Application
在启动画面活动/班级中,我这样做:
public static List<String> masterCats;
中的:
onCreate
在我的AsyncTask循环中加载数据我这样做:
Rateit.masterCats = new ArrayList<String>();
Rateit.masterCats.add(cat);
是来自数据库的列表项。我有cat
数据(Log.d
)以及ListPosition,以检查它是否已添加到cat
并且确实存在。
但是,我需要在下一个List
中抓取相同的信息并将其放入Activity
。它以0长度返回。
我只是这样做:adapter
为什么列表不能跨活动维护数据?这是因为它的adapter = new MasterCatAdapter(getActivity(), Rateit.masterCats, tf);
?别的什么?
(注意:我将很快在这里添加getter和setter方法!)
答案 0 :(得分:2)
在他的评论中提到的@ 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
的{{1}}或其他任何地方,只需访问该列表:
onCreate()
@KickingLettuce还在评论中提到如果用户导航离开getIntent().getStringArrayListExtra("MasterCats");
,则可以访问该文件。因此,无论您想要保存ArrayList的Activity
,只需将其转换为逗号分隔的String并将其保存在SharedPreferences中,如下所示:
Activity
如果您希望在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。
答案 1 :(得分:1)
将List保存在Application扩展类中是个好主意,您可以通过以下
来实现它在App类中声明List,如
public static List<String> masterCats;
并声明上述变量
的setter和getter方法public List getMasterCatsList()
{
return masteCats;
}
public Void setMasterCatsList(List list)
{
masteCats=list;
}
在Loader类中按如下方式获取应用程序对象
Application application =(YOurClassName That Extends Application class)getApplication();
并将列表设置如下
application.setMasterCatsList(List list);
现在您可以从任何活动访问此列表,如下所示
Application application = (YOurClassName That Extends Application class) getApplication();
List l = application.getMasterCatsList();
希望它对你有所帮助