我有一个需要从不同屏幕访问数据的Android应用程序。主要的问题是,每个人都需要能够修改数据,并且有相当多的一部分 - 300个整数分为六个数组。
我能想到的选择是:
将每个屏幕放在单独的视图中,并使用ViewAnimator作为最顶层布局,根据需要在子视图之间切换;这样,数组在主活动中定义,并且可以被所有屏幕访问(包括读取和写入)。
将每个屏幕放在自己的Activity中,并将数据从一个屏幕传递到另一个屏幕,方法是将它放入startActivityForResult调用中包含的Bundle中(任何更改都将通过返回的Intent的Extras传回) onActivityResult)。这样做的问题是,数据必须被复制很多次,这似乎在时间和内存方面都需要相当多的开销。
创建一个Class来保存数据;在主活动中创建该类的变量,并来回传递该变量 - 但是变量本身是否被传递给第二个活动或其副本(因此任何更改都不会反映在该变量中)主要活动)?
这种情况有没有首选方法?我要留下什么了吗?
答案 0 :(得分:1)
你的选择#3正朝着正确的方向发展。至于从任何地方访问变量..你想使用Singleton设计模式。通常,这会创建一个资源的单个实例(在这种情况下,您的300万个整数!)如果每个活动正在处理不同的'设置'数据然后我误解了你的请求,你不应该使用这种单例方法。
为了简化示例,我使用了一个String(mExamplePayload)来表示您的数据。对于您的特定实现,您可以创建一个包含每个数组的变量(或为每个数组创建一个变量。)
public class MyData {
private static MyData sMyData;
private Context mAppContext;
private String mExamplePayload;
private MyData(Context c){
mAppContext = c.getApplicationContext();
mExamplePayload = "You can access this string from any Activity or Fragment";
}
public static MyData get(Context c){
if (sMyData==null){
sMyData = new MyData(c);
}
return sMyData;
}
public String getPayload() {
return mExamplePayload;
}
}
这就是您访问活动中数据的方式
MyData data = MyData.get(this);
String test = data.getPayload();
或片段
MyData data = MyData.get(getActivity());
String test = data.getPayload();