2016-04-07 11 views
1

オプションメニューからナビゲーションメニューにいくつかのメニュー項目を移動しています。私のアプリでは、https://developer.android.com/reference/android/support/design/widget/NavigationView.htmlAndroid NavigationViewが表示されるたびにアイテムをプログラムで無効にして有効にする方法

で説明されているようなメニューで表示されたナビゲーションビューを使用しています。メインアクティビティのWebViewにあるwebView.goBack()という項目があります。オプションメニューに配置されたときは、webView.canGoBack()の場合にのみ有効になりました。それ以外の場合は無効になっています(グレー表示)。これを実現するために、onPrepareOptionsMenu()は、コマンドに含ま:オプションメニューが表示されようとしているたびに呼び出されonPrepareOptionsMenu()として

back.setEnabled(webView.canGoBack());

を、これは正しくWebViewの状態を反映するために、メニュー項目の状況を更新してしまいます。

しかし、NavigationViewでこの動作を再現することはできませんでした。 NavigationViewが準備されるたびに呼び出されるonPrepareOptionsMenu()に似たメソッドまたはクラスがありますか?

PS。同様の質問に対処した他の人は、常に、リスト・ビューを使用して参照していました。リスト・ビューは、ナビゲーション・ドロワーを配置する古い方法でした。この質問は、具体的にはNavigationViewをメニューと共に使用することに関する。

答えて

0

この質問に対する回答は、DrawerListenerを追加し、onDrawerStateChangedを上書きすることです。

// 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は、基になるメニューをgetMenu()で公開します。これを使ってメニュー項目を見つけて変更することができます。

+0

はい、わかりました。しかし、NavigationViewが表示されるたびにメニューアイテムのステータスを更新するためにどのようなメソッドをオーバーライドしますか? –

関連する問題