Элемент ActionBar Dropdown Spinner по умолчанию относится к первому элементу
Я пытаюсь установить индекс элемента, который должен быть выбран в spinner по умолчанию, но он всегда по умолчанию равен 0 (1-й элемент)
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
SpinnerAdapter spinnerAdapter =
new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_dropdown_item,
names);
int selectedIndex = actionBar.getSelectedNavigationIndex();
if (selectedIndex != targetIndex) {
actionBar.setSelectedNavigationItem(targetIndex);
}
Выше, если всегда вызывается блок. Даже после установки индекса 2, в следующий раз, когда я проверю, он возвращает 0.
Изменить: я подозреваю, что getSelectedNavigationIndex дает индекс элемента actionBar, а не выпадающего элемента Spinner. Если это так, то какой метод устанавливает индекс выбранного элемента внутри выпадающего меню?
Ответы
Ответ 1
Перед изменением выбранного элемента убедитесь, что вы вызываете setListNavigationCallbacks. Я не вижу этого в вашем примере, поэтому я думаю, что проблема.
Вот пример:
actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(adapter, this);
actionBar.setSelectedNavigationItem(position);
Он работает в моем приложении без проблем.
Ответ 2
Пробовали ли вы использовать общие привилегии, чтобы сохранить значение выбранного счетчика. Я использовал этот код для сохранения выбора пользователей с помощью общих настроек, поэтому в следующий раз, когда они открыли приложение, счетчик был установлен на последнее значение, которое они выбрали:
Spinner Spinner = (Spinner) findViewById(R.id.Spinner);
String[] spinnervalues = getSpinnervalues();
ArrayAdapter<CharSequence> spinnerAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, makes);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner.setAdapter(spinnerAdapter);
int position = Utils.getIndex(getSpinnerval(), makes);
Spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
String selected = (String) parentView.getSelectedItem();
Spinner Spinner = (Spinner) findViewById(R.id.Spinner);
String[] spinnervalues = Filter.this.getSpinnerval(selected);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(Filter.this, android.R.layout.simple_spinner_item, models);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner.setAdapter(adapter);
}
public void onNothingSelected(AdapterView<?> parentView) {}
});
Spinner.setSelection(makeposition, true);
int position = Utils.getIndex(getSpinnerval());
if (position >= 0) {
Spinner Spinner = (Spinner) findViewById(R.id.Spinner);
Spinner.setSelection(position, true);
}
Тогда получим Util:
public String getSpinnerval() {
return getSharedPreferences().getString("val", "");
}
Я немного изменил код, чтобы он не был на 100% прав, но может дать вам идею.