我想在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);
有效,但声明的数组不是静态的。
答案 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);