2011-12-28 8 views
11

Sto cercando di far funzionare il mio spinner come elemento della Lista a discesa della barra di azioni, ma non riesco a implementarlo affatto, non ci sono molti tutorial per questo dopo aver cercato su Google. Penso che abbia qualcosa a che fare con .setListNavigationCallbacks(); linea di codice, non ho proprio idea di come farlo funzionare da quella linea in poi.Come posso aggiungere il mio spinner all'ActionBar?

// setup action bar for spinner 
    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
    bar.setListNavigationCallbacks(); 

    Spinner spinner = (Spinner) findViewById(R.id.spinner1); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.tools_array_stopwatch, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(this); 
} 

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) { 
    // TODO Auto-generated method stub 
    switch (arg2) { 
    case 0:  
     break; 

    case 1:     
     Intent countdown = new Intent(this, CountdownActivity.class); 
     startActivity(countdown);      
     break; 

    default :      
     break; 
    } 
} 

public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 

risposta

18

Passaggio 1: eliminare il numero Spinner.

Passaggio 2: eliminare il numero OnItemSelectedListener.

Passo 3: fornire il ArrayAdapter come primo parametro a setListNavigationCallbacks().

Passaggio 4: Fornire un'implementazione di ActionBar.OnNavigationListener come secondo parametro su setListNavigationCallbacks().

Passo # 5: Nel metodo onNavigationItemSelected() callback nel vostro ActionBar.OnNavigationListener, fare tutto ciò che è che si vuole fare in base al cambiamento dello stato della navigazione (ad esempio, eseguire un FragmentTransaction).

Passaggio n. 6: riprogettare l'applicazione per non avviare un'attività in base a questa selezione di navigazione, come si sta tentando in precedenza. Avvia l'attività da un pulsante della barra degli strumenti o da una voce di menu delle opzioni oppure utilizza i frammenti per sostituire (parte) l'interfaccia utente dell'attività esistente. L'elenco e la navigazione delle schede nella barra delle azioni è non per le attività di avvio.

+0

"La navigazione di elenchi e schede nella barra delle azioni non è per le attività di avvio." Perché non è possibile utilizzare una barra delle azioni per avviare attività? –

+0

@JerryBrady: gli elementi di azione (ad esempio, i pulsanti della barra degli strumenti) hanno sicuramente più senso per avviare altre attività. – CommonsWare

+1

@CommonsWare: tenderei ad essere d'accordo, ma Google Maps sembra violare grossolanamente questo principio su ICS, ogni voce nella lista di navigazione apre un'attività separata. Non trovo questo comportamento particolarmente strano; invece quello che mi lascia perplesso è il modo in cui sono riusciti a evitare che lo spinner ricevesse per sbaglio l'etichetta sbagliata quando si toccava un oggetto. –