2017-08-25 1 views
1

Ich möchte einige Menüpunkte verstecken, wenn die Suchansicht erweitert, so ist dies der Code, den ich verwendet:Android Suche funktioniert nicht, wenn invalidateOptionsMenu() aufrufen

@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; 
     } 
    }); 
} 

Jetzt Dieser Code funktioniert wie erwartet mit Ausnahme einer Frage: Wenn ich auf die Suchschaltfläche klicke, wird SearchView nicht angezeigt. Ich kann nicht herausfinden, was das Problem ist. Ich suchte nach ähnlichen Fragen auf Stack-Überlauf, aber ich habe gefunden keine Antwort der das Problem behoben, so wird jede Hilfe

Antwort

2

begrüßen können Sie versuchen, diese Weise zu verstecken und zeigen andere Optionen-Menü: -

@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

Danke. Das funktioniert perfekt –

Verwandte Themen