2016-04-07 15 views
1

Ich bewege einige Menüpunkte vom Optionsmenü zum Navigationsmenü. Meine App verwendet eine Navigationsansicht, die von einem Menü ausgefüllt wird, wie unterWie programmiere ich jedes Mal, wenn ein Android NavigationView angezeigt wird, programmatisch und deaktiviere es?

beschrieben. Einer der Einträge ruft webView.goBack() auf der WebView in der Hauptaktivität. Wenn es im Optionsmenü platziert wurde, wurde es nur aktiviert, wenn webView.canGoBack(). Ansonsten wurde es deaktiviert (ausgegraut). Um dies zu erreichen, onPrepareOptionsMenu() den Befehl enthalten:

back.setEnabled(webView.canGoBack());

Wie onPrepareOptionsMenu() wird jedesmal, wenn das Optionsmenü aufgerufen wird über angezeigt werden, würde dies den Status des Menüpunktes aktualisieren, um richtig den Zustand der WebView zu reflektieren .

Ich konnte dieses Verhalten mit dem NavigationView jedoch nicht replizieren. Gibt es eine Methode oder Klasse ähnlich onPrepareOptionsMenu(), die jedes Mal aufgerufen wird, wenn die NavigationView vorbereitet ist?

PS. Andere Leute, die ähnliche Fragen gestellt haben, haben sich immer auf die Verwendung einer ListView bezogen, die eine ältere Methode war, eine Navigationsleiste zu füllen. Diese Frage bezieht sich speziell auf die Verwendung eines NavigationView mit einem Menü.

Antwort

0

Die Antwort auf diese Frage ist eine DrawerListener hinzufügen und onDrawerStateChanged überschreiben.

// Create the navigation drawer. 
drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
// The `DrawerTitle` identifies the drawer in accessibility mode. 
drawerLayout.setDrawerTitle(GravityCompat.START, getString(R.string.navigation_drawer)); 

// Listen for touches on the navigation menu. 
final NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView); 
navigationView.setNavigationItemSelectedListener(this); 

// Get handles for `navigationMenu` and the back and forward menu items. The menu is zero-based, so item 1 and 2 and the second and third items in the menu. 
final Menu navigationMenu = navigationView.getMenu(); 
final MenuItem navigationBackMenuItem = navigationMenu.getItem(1); 
final MenuItem navigationForwardMenuItem = navigationMenu.getItem(2); 

// The `DrawerListener` allows us to update the Navigation Menu. 
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { 
    @Override 
    public void onDrawerSlide(View drawerView, float slideOffset) { 
    } 

    @Override 
    public void onDrawerOpened(View drawerView) { 
    } 

    @Override 
    public void onDrawerClosed(View drawerView) { 
    } 

    @Override 
    public void onDrawerStateChanged(int newState) { 
     // Update the back and forward menu items every time the drawer opens. 
     navigationBackMenuItem.setEnabled(webView.canGoBack()); 
     navigationForwardMenuItem.setEnabled(webView.canGoForward()); 
    } 
}); 
0

NavigationView zeigt das zugrunde liegende Menü mit getMenu() an. Sie können damit Menüelemente suchen und Änderungen daran vornehmen.

+0

Ja, das weiß ich. Aber welche Methode überschreiben Sie, um den Status der Menüpunkte jedes Mal zu aktualisieren, wenn die NavigationView angezeigt wird? –

Verwandte Themen