在我的应用程序中,我有一个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()方法中获取本地化的字符串?

最佳答案

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

一种方法是在应用程序的Context方法中设置onCreate()类型的静态成员变量,这在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);
    }
}

10-02 03:17