java - 如何在 Android 中从枚举的 ToString 访问资源字符串?

标签 java android

在我的应用中,我有一个从枚举中填充的 Spinner:

ArrayAdapter<myEnum> enumAdapter = new ArrayAdapter<Stroke> (parentActivity.getApplicationContext(), R.layout.simple_spinner_item, myEnum.values());
enumAdapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
enumSpinner.setAdapter(strokeAdapter);

这使用枚举的 toString() 方法的覆盖来获取枚举值的友好名称以显示在 Spinner 中。目前我的枚举有硬编码的友好名称的字符串,但我想将这些移动到 strings.xml 以支持本地化。

但是,toString 无权访问 Context,因此我不确定如何解析资源 ID。

有没有办法在枚举的 toString() 方法中获取本地化字符串?

最佳答案

如果我理解正确,这里真正的问题是如何从您的 enum 中获取 Context,以便您可以调用 Context.getString() 获取所需字符串的本地化版本。

一种方法是在应用程序的 onCreate() 方法中设置类型为 Context 的静态成员变量,该方法在 this answer 中进行了描述。 .这里的想法是,每次创建或重新创建您的应用程序时,您都会将应用程序上下文保存在一个易于获取的变量中。

然后,在枚举值的构造函数中传入资源 ID,并在 toString() 方法中使用 Context。

例如:

public enum Example {
    HELLO(R.string.hello),
    WORLD(R.string.world);

    private int mResourceId;

    private Example(int id) {
        mResourceId = id;
    }

    @Override
    public String toString() {
        return App.getContext().getString(mResourceId);
    }
}

关于java - 如何在 Android 中从枚举的 ToString 访问资源字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12625041/

相关文章:

java - Wildfly 8.1.0 进行 EJB 远程调用时出错

java - 在线程内调用 MessageBox

android - tabhost 安卓

android - 无法在自定义通知中包含简单 View ?

java - log4j2线程上下文的配置

java - JUnit Eclipse 无法运行单元测试

java - 数组中的多个对象(java)

java - SQLite项目中的语法bug,找不到他

android - 如何在安卓中使用手指橡皮擦?

java - 修复记录: Cell information from worksheet created