J'ai une énumération où je dois afficher les valeurs sous forme de chaînes localisées. Mon approche actuelle a été la suivante :
public enum MyEnum {
VALUE1(R.string.VALUE1),
VALUE2(R.string.VALUE2),
.
.
VALUE10(R.string.VALUE10);
private int mResId = -1;
private MuEnum(int resId) {
mResId = resId;
}
public String toLocalizedString(Resources r) {
if (-1 != mResId) return (r.getString(mResId));
return (this.toString());
}
}
Existe-t-il un moyen plus simple de faire cela? J'adorerais si je pouvais en quelque sorte rechercher la ressource en fonction du nom de la valeur d'énumération (c'est-à-dire 'VALUE1').
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="VALUE1"/>My string</string>
<string name="VALUE2"/>My string 2</string>
.
.
<string name="VALUE10"/>My string 3</string>
</resources>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EDIT : Juste pour référence future, c'est la solution qui a le mieux fonctionné pour moi :
public enum MyEnum {
VALUE1,
VALUE2,
.
.
VALUE10;
/**
* Returns a localized label used to represent this enumeration value. If no label
* has been defined, then this defaults to the result of {@link Enum#name()}.
*
* <p>The name of the string resource for the label must match the name of the enumeration
* value. For example, for enum value 'ENUM1' the resource would be defined as 'R.string.ENUM1'.
*
* @param context the context that the string resource of the label is in.
* @return a localized label for the enum value or the result of name()
*/
public String getLabel(Context context) {
Resources res = context.getResources();
int resId = res.getIdentifier(this.name(), "string", context.getPackageName());
if (0 != resId) {
return (res.getString(resId));
}
return (name());
}
}