在活动之间共享ArrayList

时间:2013-03-04 21:45:47

标签: java android list arraylist

我遇到了在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方法!)

2 个答案:

答案 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();

希望它对你有所帮助