在整个Android Java项目中读取和修改我的List的正确方法是什么?

时间:2012-07-25 19:44:01

标签: java android

我有以下列表:

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

它填充了我的应用程序加载的数据。我需要在整个应用程序中使用它,在大多数活动和碎片上,数据都被读取和修改。

在没有太多复杂性的情况下,使这种全局化的最佳和最简单的方法是什么?

注意:由于在Stack Overflow上解释的原因太多,因此使用List而不是具有属性的自定义Object。

5 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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。

答案 2 :(得分: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.
    }

}

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

答案 3 :(得分: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;
}

答案 4 :(得分:0)

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

public List getList() {
    return items;
}

public void addItems(String item) {
    //code to add items
}