mmo*_*mmo 8 android android-widget
我有一个问题.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; }
};
Run Code Online (Sandbox Code Playgroud)
我想写一些类似的东西:
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; }
}
Run Code Online (Sandbox Code Playgroud)
这将允许使用资源文件修改模式的名称,从而允许以后的名称修改,而无需更改代码,国际化等.
问题是,对资源的标准访问是通过Activity的getResources()方法实现的,该方法仅在构造函数中可用(并且在实例方法中).但是,枚举声明是类的静态初始化代码的一部分.有没有办法以静态方式访问应用程序的资源?
迈克尔
plu*_*ind 13
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; }
}
Run Code Online (Sandbox Code Playgroud)
您也可以执行以下操作:
public class ClassName {
public static Resources res;
}
Run Code Online (Sandbox Code Playgroud)
在你Application.onCreate()或Activity.onCreate():
ClassName.res = getResources();
Run Code Online (Sandbox Code Playgroud)
在你的enum Mode:
@Override
public String toString() {
Resources res = ClassName.res;
if (res==null){ return super.toString(); }
else { return res.getText(id); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4233 次 |
| 最近记录: |