在我的应用程序中,我有一个由枚举填充的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);
Run Code Online (Sandbox Code Playgroud)
这使用了枚举toString()方法的覆盖来获取要在其中显示的枚举值的友好名称Spinner.目前我的enum有友好名字的字符串硬编码,但我想将它们移动strings.xml到支持本地化.
但是,toString无权访问,Context因此我不确定如何解析资源ID.
有没有办法在枚举的toString()方法中获取本地化字符串?
wsa*_*lle 26
如果我理解正确的话,那么真正的问题是如何Context从你那里得到一个enum,这样你就可以打电话Context.getString()来获得你需要的本地化版本的字符串.
一种方法是Context在应用程序的onCreate()方法中设置类型的静态成员变量,本答案中对此进行了描述.这里的想法是,每次创建或重新创建应用程序时,您都会在容易获得的变量中保留应用程序上下文.
然后,在枚举值的构造函数中传入资源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);
}
}
Run Code Online (Sandbox Code Playgroud)
@Override public String toString(){return App.getContext()。getString(id); }
枚举类与您的活动没有任何关系很重要,因为如果要在另一个应用程序中使用,则引用静态上下文将无法进行。
因此,更好的方法是将字符串的资源ID返回给活动,然后让活动使用其资源中的ID来获取字符串。
因此,从您的枚举类中,您将拥有一个类似于以下内容的方法:
public int getResourceId()
{
return resourceId;
}
Run Code Online (Sandbox Code Playgroud)
然后在您的活动中,我将建立一个包含arraylist的列表:
final List<String> enumList = new ArrayList<String>();
for ( final MyEnum status : MyEnum.values() )
{
enumList.add( getString( status.getResourceId() ) );
}
Run Code Online (Sandbox Code Playgroud)
然后可以将enumList与ArrayAdapter Bingo一起使用:)
因此,现在您与枚举类没有关系,因此,如果您要构建另一个需要使用相同枚举类的应用,则可以轻松做到这一点。
| 归档时间: |
|
| 查看次数: |
15148 次 |
| 最近记录: |