2017-08-25 1 views
1

Je veux cacher certains éléments du menu lorsque la vue de la recherche se développe donc c'est le code je:Android SearchView ne fonctionne pas lorsque vous appelez invalidateOptionsMenu()

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    menu.findItem(R.id.action_refresh).setVisible(!isSearchOpen) 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    MenuItem searchMenuItem = menu.findItem(R.id.action_search) 
    SearchView searchView = searchMenuItem.getMenu(); 

    searchView.setOnQueryTextListener(this); 

    MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      isSearchOpen = true; 
      invalidateOptionsMenu(); 

      return true; 
     } 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      isSearchOpen = false; 
      invalidateOptionsMenu(); 
      return true; 
     } 
    }); 
} 

Maintenant, ce code fonctionne comme prévu sauf une question: lorsque je clique sur le bouton de recherche, le SearchView n'apparaît pas. Je n'arrive pas à comprendre quel est le problème. Je recherchais des problèmes similaires sur débordement de la pile, mais je ne l'ai pas trouvé de réponse fixe la question, de sorte que toute aide sera accueilli

Répondre

2

Vous pouvez essayer façon de masquer et d'afficher un autre menu Options: -

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.search_menu, menu); 
    final MenuItem delMenu = menu.findItem(R.id.action_delete); 
    final MenuItem editMenu = menu.findItem(R.id.action_edit); 
    MenuItem searchMenu = menu.findItem(R.id.action_search); 
    SearchView searchView = (SearchView) searchMenu.getActionView(); 

    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View view, boolean b) { 
      if(b) { 
       delMenu.setVisible(false); 
       editMenu.setVisible(false); 
      } 
     } 
    }); 
    searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
     @Override 
     public boolean onClose() { 
      delMenu.setVisible(true); 
      editMenu.setVisible(true); 
      return false; 
     } 
    }); 
    return true; 
} 
+0

Merci. Cela fonctionne parfaitement –