Так как мне нужно что-то, что также работает с Локализация , я пришел к этим двум методам:
private int getArrayPositionForValue(final int arrayResId, final String value) {
final Resources english = Utils.getLocalizedResources(this, new Locale("en"));
final List<String> arrayValues = Arrays.asList(english.getStringArray(arrayResId));
for (int position = 0; position < arrayValues.size(); position++) {
if (arrayValues.get(position).equalsIgnoreCase(value)) {
return position;
}
}
Log.w(TAG, "getArrayPosition() --> return 0 (fallback); No index found for value = " + value);
return 0;
}
Как видите, я также наткнулся на дополнительную сложность чувствительности к регистру между arrays.xml и value
, с которыми я сравниваю.
Если у вас этого нет, описанный выше метод можно упростить до следующего вида:
return arrayValues.indexOf(value);
Статический вспомогательный метод
public static Resources getLocalizedResources(Context context, Locale desiredLocale) {
Configuration conf = context.getResources().getConfiguration();
conf = new Configuration(conf);
conf.setLocale(desiredLocale);
Context localizedContext = context.createConfigurationContext(conf);
return localizedContext.getResources();
}