通过扩展Application来创建单个实例?

时间:2014-01-08 10:48:38

标签: java android

我希望在3个不同的活动中提供一个字符串数组,我希望在任何活动中完成的更改都能反映在所有3个活动中。所以我遇到了单例和应用程序类模式。不知何故,我更喜欢应用程序类模式。我提到了thisthis

我仍然不确定如何创建变量的单个实例。 我有一个字符串数组列表。如何创建它的单个实例?

3 个答案:

答案 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");
    }
}