我有一个问题。 Android 应用程序的资源:
我的应用程序有杂项。模式(编辑/计划/执行),我想使用枚举类型来描述。但是,我想用源自资源 string.xml 文件的字符串填充枚举值,即而不是
enum Mode {
EDIT ("edit"),
PLAN ("plan"),
EXEC ("exec");
String name;
Mode(String name) { this.name = name; }
@Override
public String toString() { return this.name; }
};
我想写一些类似的东西:
enum Mode {
EDIT (getResources().getText(R.string.mode_edit).toString()),
PLAN (getResources().getText(R.string.mode_plan).toString())),
EXEC (getResources().getText(R.string.mode_exec).toString()));
String name;
Mode(String name) { this.name = name; }
@Override
public String toString() { return this.name; }
}
例如允许使用资源文件修改模式的名称,从而允许以后进行名称修改,而无需更改代码、国际化等。
问题是,对资源的标准访问是通过 Activity 的 getResources() 方法,该方法仅在构造函数中(以及实例方法期间)可用。然而,枚举声明是类静态初始化代码的一部分。有没有办法以静态方式访问应用程序的资源?
Michael
enum Mode {
EDIT (R.string.mode_edit),
PLAN (R.string.mode_plan),
EXEC (R.string.mode_exec);
String id;
Mode(String id) { this.id = id; }
public String getName(Resources r){ return r.getText(id); }
@Override
public String toString() { return this.name; }
}
或者,您可以执行以下操作:
public class ClassName {
public static Resources res;
}
In your Application.onCreate()
or Activity.onCreate()
:
ClassName.res = getResources();
并在你的enum Mode
:
@Override
public String toString() {
Resources res = ClassName.res;
if (res==null){ return super.toString(); }
else { return res.getText(id); }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)