我有以下列表:
List<Map<String, String>> items = new ArrayList<Map<String, String>>();
它填充了我的应用程序加载的数据。我需要在整个应用程序中使用它,在大多数活动和碎片上,数据都被读取和修改。
在没有太多复杂性的情况下,使这种全局化的最佳和最简单的方法是什么?
注意:由于在Stack Overflow上解释的原因太多,因此使用List而不是具有属性的自定义Object。
答案 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
}