我有以下列表:
List<Map<String, String>> items = new ArrayList<Map<String, String>>();
它填充了有关我的应用程序负载的数据。我需要在整个应用程序中,在大多数活动和片段上使用它,同时读取和修改数据。
在没有太多复杂性的情况下,最好和最简单的方法是什么?
注意:由于 Stack Overflow 上无法解释的原因,这主要是使用 List 而不是作为具有属性的自定义对象。
我会创建一个类来保存您的数据(类似于 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;
}
}
其他帖子没有抓住重点。当然,他可以将列表存储为实例成员并使用 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 处理。
创建一个抽象助手类并将您的列表粘贴在那里,这样您就可以从任何您喜欢的地方访问它。
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.
}
}
使您的类抽象将阻止某人实例化它。如果您在应用程序首次运行时需要列表中的任何元素,那么您可以在静态初始化程序块中执行此操作,如上所示。
这将允许您在应用程序中的任何位置访问它。
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;
}
实现此目的的首选方法是使用 getter 和 setter。将列表本身设为私有,并创建公共 getList 和 publi setList 方法以从应用程序的任何位置获取和设置列表。
public List getList() {
return items;
}
public void addItems(String item) {
//code to add items
}