2011-12-13 12 views
17

Sto cercando di impostare l'indice della voce che deve essere selezionato nel filatore di default, ma è sempre imposta 0 (1 ° punto)ActionBar discesa Spinner voce default prima voce

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); 
} 

Sopra se il blocco viene chiamato sempre. Anche dopo aver impostato l'indice 2, la prossima volta che lo controllo restituisce 0.

Modifica: Sospetto che getSelectedNavigationIndex fornisca l'indice dell'elemento ActionBar anziché dell'elemento a discesa Spinner. In questo caso, quale metodo imposta l'indice dell'elemento selezionato all'interno del menu a discesa?

+0

Hai provato a testare semplicemente questo metodo? Ad esempio, crea lo spinner con tre elementi e attiva il secondo senza utilizzare alcuna condizione. Funziona bene per me. Dai un'occhiata a [il mio esempio] (http://stackoverflow.com/questions/9039045/how-to-set-active-item-in-the-action-bar-drop-down-navigation/9046460#comment11641511_9046460). – Roman

+1

Inoltre, prova a impostare l'adattatore prima di ottenere/impostare navigazioneIndex, ad esempio actionBar.setListNavigationCallbacks (adattatore, questo); – brk3

risposta

34

Assicurarsi di chiamare il metodo setListNavigationCallbacks prima di modificare l'elemento selezionato. Non riesco a vederlo nel tuo esempio, quindi penso che sia questo il problema.

Ecco un esempio:

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

Funziona nella mia app senza problemi.

1

Hai provato a utilizzare shared prefences per salvare il valore della casella selezionata. Ho usato questo codice per salvare la selezione degli utenti con le preferenze condivise così la prossima volta hanno aperto l'applicazione del filatore è stato impostato per l'ultimo valore hanno scelto:

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); 
} 

Poi l'ottenere Util:

public String getSpinnerval() { 
    return getSharedPreferences().getString("val", ""); 
} 

Ho modificato leggermente il codice, quindi potrebbe non essere corretto al 100%, ma potrebbe darti un'idea.

+1

Parla di ActionBar (da Honeycomb), non di Spinner :-) – Bourbon

+0

Intendevi usare 'spinnervalues' invece di' models'? –

Problemi correlati