静态访问Android应用程序的资源?

我有一个问题。 一个Android应用程序的资源:

我的应用程序有杂项。 模式(编辑/计划/执行),我想使用枚举types来描述。 但是,我想要用源自资源string.xml文件的string来填充枚举值,而不是

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()方法来实现的,该方法只在构造函数(和实例方法期间)中可用。 然而,枚举声明是类的静态初始化代码的一部分。 有没有办法以静态方式访问应用程序的资源?

迈克尔

Solutions Collecting From Web of "静态访问Android应用程序的资源?"

 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; } 

在您的Application.onCreate()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); } } 

谢谢,radek-k,为例子! 在此期间,我想出了一个类似的想法,即在Activity的onCreate()方法中,我向枚举中添加了一个静态方法,然后传递资源句柄。 这允许toString()方法然后访问资源string。 恕我直言,不是很优雅,但它的作品…

干杯,迈克尔

基于这个https://stackoverflow.com/a/3560656/262462 ,因为R.string包含整数

 enum Mode { EDIT (R.string.mode_edit), PLAN (R.string.mode_plan), EXEC (R.string.mode_exec); int id; Mode(int id) { this.id = id; } public String toString(Resources r) { return r.getString(id); } }