繁体   English   中英

在活动之间共享ArrayList

[英]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);
}

然后,在新ActivityonCreate()或任何地方,只需执行以下操作即可访问列表:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM