我希望在3个不同的活动中提供一个字符串数组,我希望在任何活动中完成的更改都能反映在所有3个活动中。所以我遇到了单例和应用程序类模式。不知何故,我更喜欢应用程序类模式。我提到了this和this。
我仍然不确定如何创建变量的单个实例。 我有一个字符串数组列表。如何创建它的单个实例?
答案 0 :(得分:0)
将Array移动到Apps Application类,以便您可以从任何类访问它。
您可以在Appllication类中创建一个Field,例如一个String数组
MyApplication extends Application {
public ArrayList<String> myList = new ....;
//...more stuff
}
你可以得到像这样的参考
MyApplication application = (MyApplication)getActivity().getApplication();
application.myList = whateverStringArrayList;
我假设您知道如何扩展应用程序并使其运行:)
答案 1 :(得分:0)
将数组移动到继承Application类的类,在<application>
标记集android:name
attr中的Manifest中为此类。然后在任何活动中,您都可以通过((YourAppClass) getApplicationContext()).getArray()
答案 2 :(得分:0)
首先,您可以在其中一个Activity类中将ArrayList声明为静态字段...
public class ActivityA extends Activity {
public static final ArrayList<String> ARRAY_LIST = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
您可以在任何活动中访问此字段,例如
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityA.ARRAY_LIST.add("string");
}
}
或者你仍然可以编写自己的单个实例类,如
public class Data {
private static Data data;
private final ArrayList<String> arrayList;
private Data() {
arrayList = new ArrayList<String>();
}
public static Data getData() {
if(data == null) {
data = new Data();
}
return data;
}
public ArrayList<String> getArrayList() {
return arrayList;
}
}
并在任何活动中使用DataList中的ArrayList,如
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Data.getData().getArrayList().add("string");
}
}