Существует выпадающий список (Spinner), заполненный строковыми элементами, которые содержаться в
<string-array>
и отсортированы в алфавитном порядке. Когда мне необходимо обработать выбор какого-либо элемента пользователем, я использую примерно такой код:
public class MyActivity extends Activity {
Spinner ct;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ct = (Spinner) findViewById(R.id.spinner);
ArrayAdapter categories = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item,
getResources().getStringArray(R.array.some_array));
categories.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
ct.setAdapter(categories);
ct.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
//performing action #1
break;
case 1:
//performing action #2
break;
etc.
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
Это отлично работает пока в приложении только один язык, но в случае, когда добавляется еще одна (несколько) локализация, строковые ресурсы будут переведены на соответствующий язык, а элементы в
<string-array>
будут иметь несколько другой порядок. Соответственно, вышеуказанный код не сможет правильно обработать выбор пользователя, так как порядок элементов в выпадающем списке будет различным для каждой локализации. В таком случае мне приходиться использовать следующий вариант:
ct.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String chosenStr = ct.getSelectedItem().toString();
switch (chosenStr) {
case "Строка #1 в первой локализации":
//performing some action #1
break;
case "Строка #1 во второй локализации":
//performing some action #1
break;
case "Строка #2 в первой локализации":
//performing some action #2
break;
case "Строка #2 во второй локализации":
//performing some action #2
break;
}
}
});
Мне не нравится такой подход, и я хотел узнать, не существует ли иного, более правильного и элегантного варианта реализации?