静态访问Android应用的资源?

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)