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

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

迈克尔


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() - 方法然后访问资源字符串。 恕我直言,不是很优雅,但它的作品...

干杯,迈克尔


基于这个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); }
}
链接地址: http://www.djcxy.com/p/59995.html

上一篇: Static access to an Android app's resources?

下一篇: Retrieving all Drawable resources from Resources object