0

我有以下列表:

List<Map<String, String>> items = new ArrayList<Map<String, String>>();

它填充了有关我的应用程序负载的数据。我需要在整个应用程序中,在大多数活动和片段上使用它,同时读取和修改数据。

在没有太多复杂性的情况下,最好和最简单的方法是什么?

注意:由于 Stack Overflow 上无法解释的原因,这主要是使用 List 而不是作为具有属性的自定义对象。

4

5 回答 5

3

我会创建一个类来保存您的数据(类似于 Singleton 方法),并将变量设为静态。

class NewClass {

    public static List<Map<String, String>> items = new ArrayList<Map<String,String>>();

}

您可以随意将 getter/setter/modifier 方法添加到上述类中。

然后在您的其他类中,您可以创建局部变量,您可以将其定义为其他类的列表。

class OldClass {
    private List<Map<String, String>> myItems;

    public OldClass() {
        myItems = NewClass.items;
    }
}
于 2012-07-25T19:47:44.780 回答
3

其他帖子没有抓住重点。当然,他可以将列表存储为实例成员并使用 getter 和 setter 访问它,但是什么对象拥有该成员?

您可以按照建议使用静态,但有更好的方法......只需将其挂在您的应用程序类中即可。创建一个扩展类Application,并在那里添加实例,

public class MyApplication extends Application { 
    private List<Map<String, String>> items = new ArrayList<Map<String, String>>();

    public List<Map<String, String>> getItems() {
        return items;
    }

    public void setItems(List<Map<String, String>> items) {
      this.items = items;
    }
}

将应用程序类配置到您的清单中,

<application
    android:name=".MyApplication"
    ...

现在,在您的活动或服务中,只需这样做,

List<Map<String, String>> items = ((MyApplication)getApplication()).getItems();

从你的碎片中,做这个,

List<Map<String, String>> items = ((MyApplication)getActivity().getApplication()).getItems();

好消息是该对象与您的应用程序具有相同的生命周期。它在您的应用程序的任何部分处于活动状态时存在,并与您的应用程序一起被 GC 处理。

于 2012-07-25T20:05:03.190 回答
0

创建一个抽象助手类并将您的列表粘贴在那里,这样您就可以从任何您喜欢的地方访问它。

public abstract class HelperClass() {

    public static List<Map<String, String>> items 
                                = new ArrayList<Map<String,String>>();

    static {
        //populate the list with anything you need when the class is loaded.
    }

}

使您的类抽象将阻止某人实例化它。如果您在应用程序首次运行时需要列表中的任何元素,那么您可以在静态初始化程序块中执行此操作,如上所示。

于 2012-07-25T19:46:30.990 回答
0

这将允许您在应用程序中的任何位置访问它。

private List<Map<String, String>> items = new ArrayList<Map<String, String>>();


public List<Map<String, String>> getItems() {
    return items;
}



public void setItems(List<Map<String, String>> items) {
    this.items = items;
}
于 2012-07-25T19:48:39.023 回答
0

实现此目的的首选方法是使用 getter 和 setter。将列表本身设为私有,并创建公共 getList 和 publi setList 方法以从应用程序的任何位置获取和设置列表。

public List getList() {
    return items;
}

public void addItems(String item) {
    //code to add items
}
于 2012-07-25T19:52:44.007 回答