2017-11-28 3 views
2

Ich habe eine einfache Aktivität mit dem Setup des Optionsmenüs mit dem unten gezeigten Code. Das Problem, das ich erfahre, ist, dass Menüpunkte mit app:showAsAction="ifRoom" nach dem Erweitern und Zusammenklappen der Suchansicht nicht angezeigt werden, obwohl auf der Symbolleiste Platz ist. Menüpunkte mit app:showAsAction="never" auf der anderen Seite erscheinen.Andere Optionen Menüelemente, die nach der erweiterten Suche nicht angezeigt werden, sind ausgeblendet

menu_simple_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_search" 
     android:icon="@drawable/ic_search_white_24dp" 
     android:title="@string/action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always|collapseActionView" /> 
    <item 
     android:id="@+id/action_filter" 
     android:icon="@drawable/ic_filter_list_white_24dp" 
     android:title="@string/action_filter" 
     app:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_sort" 
     android:icon="@drawable/ic_sort_white_24dp" 
     android:title="@string/action_sort" 
     app:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_print_all" 
     android:icon="@drawable/ic_print_white_24dp" 
     android:title="@string/action_print_all" 
     app:showAsAction="never" /> 
</menu> 

SimpleActivity.java

public class SimpleActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_simple); 
     Toolbar toolbar = findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", 
       Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(final Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_simple_activity, menu); 
     MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
     final MenuItem filterMenuItem = menu.findItem(R.id.action_filter); 
     final MenuItem sortMenuItem = menu.findItem(R.id.action_sort); 
     final MenuItem printAllMenuItem = 
     menu.findItem(R.id.action_print_all); 

     searchMenuItem.setOnActionExpandListener(new 
     MenuItem.OnActionExpandListener() { 
      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) { 
       filterMenuItem.setVisible(false); 
       sortMenuItem.setVisible(false); 
       printAllMenuItem.setVisible(false); 
       return true; 
      } 

      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) { 
       filterMenuItem.setVisible(true); 
       sortMenuItem.setVisible(true); 
       printAllMenuItem.setVisible(true); 
       return true; 
      } 
     }); 
     return true; 
    } 
} 

Wie kann ich das Problem beheben?

+0

haben Sie versucht, [invalidateOptionsMenu()] (https://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu()) aufzurufen? – LordRaydenMK

+0

Der Aufruf von invalidateOptionsMenu() nach dem Aktivieren der Sichtbarkeit der anderen Elemente funktioniert. Danke –

+0

Ich werde eine Antwort schreiben, damit Sie es als akzeptiert markieren können – LordRaydenMK

Antwort

1

Sie sollten invalidateOptionsMenu() nach dem Einstellen der Elemente als sichtbar aufrufen.

Aus der Dokumentation:

erklären, dass das Optionsmenü geändert hat, so neu erstellt werden soll. Die Methode onCreateOptionsMenu (Menu) wird aufgerufen, wenn sie das nächste Mal zur Anzeige benötigt.

Verwandte Themen