2 votes

Développer le SearchActionItem sans l'ajouter au backstack

J'ai une activité de page de résultats de recherche qui a un widget SearchView dans la barre d'action. Dans onCreateOptionsMenu(), je le développe automatiquement et affiche la requête comme ceci :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.search_menu, menu);
    MenuItem searchMenuItem = (MenuItem) menu.findItem(R.id.menu_search);
    SearchView searchView = (SearchView)searchMenuItem.getActionView();
    searchView.setOnQueryTextListener(this);
    searchMenuItem.expandActionView(); // expand the search item
    searchView.setQuery(query, false); // hide the keyboard
    searchView.clearFocus();
    return true;
}

Le bouton d'accueil est réglé comme ceci :

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        finish();
        break;
    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

mais lorsque l'utilisateur appuie sur les boutons retour ou haut, la recherche se ferme d'abord et il faut alors appuyer une nouvelle fois pour fermer l'activité. Comment puis-je obliger l'activité à se terminer immédiatement ?

2voto

A--C Points 20292

Une chose que vous pouvez faire est finish() votre Activity dès que le SearchView est réduit par la mise en œuvre d'un OnActionExpandListener :

searchMenuItem.setOnActionExpandListener(new OnActionExpandListener() {
  @Override
  public boolean onMenuItemActionCollapse(MenuItem item) {
    finish();
    return true;      
  }
  @Override
  public boolean onMenuItemActionExpand(MenuItem item) {  
    return true;      
  }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X