2012-05-02 25 views
11

Sto usando il widget SearchView per abilitare la ricerca nella mia app. Dopo il clic iniziale sull'icona di ricerca, il widget SearchView si espande nel campo di ricerca e la freccia "indietro" viene visualizzata accanto all'icona dell'applicazione. Se faccio clic sull'icona dell'applicazione, la barra delle azioni ritorna allo stato iniziale (nessuna freccia "indietro") e lo SearchView ritorna all'icona.Ripristina barra azioni dopo aver usato SearchView

Ora il problema: dopo che la ricerca è stata eseguita, la barra delle azioni non cambia, l'unico modo per ripristinare è fare clic sull'icona dell'applicazione o sulla freccia "indietro" del telefono. Non va bene dato che voglio che la barra delle azioni vada allo stato iniziale quando la ricerca è terminata. Ho provato SearchView.setIconofied(true) ma ci sono 2 problemi:

  1. Ricerca icona appare nello stesso punto come il campo di modifica (in origine è in fondo a destra).
  2. La barra delle azioni mostra ancora la freccia "indietro".

Penso che il problema che sto affrontando derivi dal normale schema di navigazione. Nel mio caso tutto sta accadendo all'interno della stessa attività (i risultati della ricerca vengono visualizzati nella stessa attività che ospita la barra delle azioni), quindi per esempio l'esecuzione di Activity.finish() fa semplicemente uscire l'app.

Come attivare "indietro di un passo" della barra delle azioni? O simulare fare clic sull'icona dell'applicazione?

risposta

35

Sembra che tu abbia impostato questo come una vista di azione comprimibile su un MenuItem. È possibile chiamare collapseActionView() in quell'istanza MenuItem per inviarlo al suo stato chiuso.

+0

Vorrei poter upvote questo più di una volta. – dm78

1

il metodo collapseActionView() funziona solo dal livello di API 14. Se stai cercando di supporto per le versioni precedenti di Android, quindi si dovrebbe utilizzare MenuItemCompat biblioteca.

Ecco la mia soluzione per comprimere la SearchView e ripristinare la barra delle azioni ...

private MenuItem searchMenuItem; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    searchMenuItem = menu.findItem(R.id.action_search); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); 

    customizeSearchView(searchView); 

    return super.onCreateOptionsMenu(menu); 
} 




    @Override 
protected void onNewIntent(Intent intent) 
{ 
    setIntent(intent); 

    if (searchMenuItem != null) 
    { 
     if (MenuItemCompat.expandActionView(searchMenuItem)) 
     { 
      MenuItemCompat.collapseActionView(searchMenuItem); 
     } 
     else if (MenuItemCompat.collapseActionView(searchMenuItem)) 
     { 
      MenuItemCompat.expandActionView(searchMenuItem); 
     } 
    } 

    handleIntent(intent); 
} 
Problemi correlati