在我的应用程序中,我有一个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);
}
}