2012-05-02 25 views
11

Estoy usando el widget SearchView para habilitar la búsqueda en mi aplicación. Después del clic inicial en el icono de búsqueda, el widget SearchView se expande en el campo de búsqueda y la flecha "atrás" se muestra junto al icono de la aplicación. Si hago clic en el icono de la aplicación, la barra de acciones vuelve al estado inicial (sin flecha "atrás") y el SearchView vuelve al ícono.Restablecer la barra de acciones después de usar SearchView

Ahora el problema: después de que se ejecuta la búsqueda, la barra de acciones no cambia, la única forma de revertir es hacer clic en el ícono de la aplicación o en la flecha "atrás" del teléfono. No es bueno, ya que quiero que la barra de acciones vaya al estado inicial cuando se realiza la búsqueda. Probé SearchView.setIconofied(true) pero hay 2 problemas:

  1. icono de búsqueda aparece en el mismo lugar que el campo de edición (en principio, está en el extremo derecho).
  2. La barra de acciones todavía muestra la flecha "atrás".

Creo que el problema al que me enfrento es el resultado de desviarme del patrón de navegación habitual. En mi caso, todo sucede dentro de la misma actividad (los resultados de la búsqueda se muestran en la misma actividad que aloja la barra de acciones), por lo que, por ejemplo, ejecutar Activity.finish() simplemente hace que la aplicación salga.

¿Cómo disparo "retroceda un paso" de la barra de acciones? ¿O simular hacer clic en el ícono de la aplicación?

Respuesta

35

Parece que ha configurado esto como una vista de acción contraíble en un elemento de menú. Puede llamar al collapseActionView() en esa instancia de MenuItem para devolverlo a su estado cerrado.

+0

Me gustaría poder upvote esto más de una vez. – dm78

1

el método collapseActionView() sólo funciona desde el nivel del API 14. Si usted está mirando para apoyar a las versiones anteriores de Android, entonces debería usar MenuItemCompat biblioteca.

aquí está mi solución para contraer la SearchView y restablecer la barra de acción ...

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