0

我在跨活动List的类中存储 a 时遇到问题。Application

在我的启动画面中,我正在将数据加载到List数据库MySQL中。

List是在一个名为Rateitthat的类中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 方法!)

4

2 回答 2

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);
}

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

getIntent().getStringArrayListExtra("MasterCats");

@KickingLettuce 在评论中还提到了如果用户离开Activity. 因此,无论Activity您想在哪个位置保存 ArrayList,只需将其转换为以逗号分隔的字符串并将其保存在 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

于 2013-03-04T22:05:24.027 回答
1

将列表保存在应用程序扩展类中是个好主意,您可以通过以下方式实现它

在您的 App 类中如下声明列表,例如

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

希望对你有帮助

于 2013-03-05T09:42:30.313 回答