有没有办法从strings.xml中定义静态String数组

时间:2017-10-15 20:48:57

标签: java android

我想在strings.xml中使用数组声明一个静态字符串数组。

private static final String[] tip_types = getResources().getStringArray(R.array.tip_types_array);

但您无法在静态环境中使用getResources()'有办法做到这一点还是我不能使用静态变量?

显然

private final String[] tip_types = getResources().getStringArray(R.array.tip_types_array);

有效,但声明的数组不是静态的。

2 个答案:

答案 0 :(得分:0)

要获取资源(包括字符串),您始终需要一个上下文。当您创建静态字段时,即使在活动中,您也无法访问实例字段,因此没有可用的上下文。

您有两种方法可以解决问题:

方法1
您可以创建一个Application类,该类在创建时将应用程序上下文存储在静态字段中,并使用应用程序上下文获取字符串数组。

private final static String[] tip_types = YourApplicationClass.getAppContext().getResources().getStringArray(R.array.tip_types_array);

方法2
您可以为传递上下文的静态变量创建一个getter。像单例一样,您检查数组是否已经解析,并立即返回或使用提供的上下文获取。这具有延迟初始化的优点,阵列仅在实际需要时才创建。

private static String[] tip_types;

private static String[] getTipTypes(Context context) {
    if(tip_types == null) {
        tip_types = context.getResources().getStringArray(R.array.tip_types_array);
    }
    return tip_types;
}

答案 1 :(得分:0)

第一个,您需要声明一个从Application类扩展的NfcApplication自定义类:

public final class NfcApplication extends Application {

    private static NfcApplication sApplication;

    public static NfcApplication getInstance() {
        return sApplication;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        sApplication = this;
    }

    @Override
    public void onTerminate() {
        super.onTerminate();

        sApplication = null;
    }
}

第二个,然后您可以通过这种方式调用上下文

private static final String[] ARRAY_LIST = NfcApplication.getInstance().getResources().getStringArray(R.array.label_unit_array_str);