ActionBar Dropdown Spinner элемент по умолчанию первый элемент - PullRequest
17 голосов
/ 13 декабря 2011

Я пытаюсь установить индекс элемента, который должен быть выбран в счетчике по умолчанию, но по умолчанию он всегда равен 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. Если это так, какой метод устанавливает индекс выбранного элемента в раскрывающемся списке?

Ответы [ 2 ]

34 голосов
/ 12 февраля 2012

Убедитесь, что вы вызываете setListNavigationCallbacks метод перед изменением выбранного элемента.Я не вижу его в вашем примере, поэтому я думаю, что это проблема.

Вот пример:

actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(adapter, this);
actionBar.setSelectedNavigationItem(position);

Это работает в моем приложении без проблем.

1 голос
/ 13 января 2012

Вы пытались использовать общие предпочтения , чтобы сохранить значение выбранного счетчика. Я использовал этот код, чтобы сохранить выбор пользователей с общими настройками, чтобы в следующий раз, когда они открывали приложение, для счетчика было установлено последнее выбранное значение:

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% правильным, но может дать вам представление.

...