2016-10-26 18 views
0

クリックしたときにナビゲーションビューでメニュー項目のアイコンを変更しようとしています。問題は、私は最初の項目をクリックしたときに、それが正しく白にすべてのアイコンをリセットしますが、それはアクセントカラーと、選択したアイコンを設定していることであるAndroid NavigationViewメニューアイコンの問題

private void selectDrawerItem(final MenuItem menuItem){ 

    for (int i = 0; i < navigationView.getMenu().size(); i++){ 
     Log.e(TAG, "Clearing " + navigationView.getMenu().getItem(i).getItemId() + " " + navigationView.getMenu().getItem(i).getIcon()); 
     navigationView.getMenu().getItem(i).getIcon().setTint(ContextCompat.getColor(this, R.color.white)); 
    } 

    switch (menuItem.getItemId()){ 
     default: 
      break; 

     case R.id.drawer_item_one: 
      menuItem.getIcon().setTint(ContextCompat.getColor(this, R.color.accent)); 
      Log.e(TAG, "Setting " + menuItem.getItemId() + " " + menuItem.getIcon()); 
      break; 
    } 

    Log.e(TAG, "-----END-----"); 

    menuItem.setChecked(true); 
    //drawerLayout.closeDrawers(); 
} 

:これを行うために、私は次のメソッドを使用しています以前クリックした2つのメニュー項目。私は何が起こっているのか分かりません。ログには、バックグラウンドカラーを1回だけ設定していることが明確に示されているので、なぜ3つが設定されていますか?

switch文に追加する引出し項目のように、前の3つの項目も背景色を変更します。何が起こっている?

EDIT

私はswitch文のコードを交換し、ちょうど遅延を追加した場合、動作しているようです:

case R.id.drawer_item_one: 
      new Handler(getMainLooper()).postDelayed(new Runnable(){ 
       @Override 
       public void run(){ 
        menuItem.getIcon().setTint(ContextCompat.getColor(context, R.color.primary_dark)); 
       } 
      }, 50); 
      break; 

私も遅延を追加したくありません、どのように私は奇妙な回避策なしでこの仕事をすることができますか?私が気づいた

EDIT 2

もう一つは、代わりに色を変える、私はタイトルテキストを変更した場合、それが正常に動作していることです。

答えて

0
​​
+0

私は項目ごとに異なる選択した色を持ってしようとしているので、この文句を言わない仕事 – TychoTheTaco

0

各メニューアイテムに別の色を追加するためのリンクの下に参照してくださいするのに役立ちます。 How to give color to menu items for Navigation drawer?

+0

私はリンクの答えに数3をやろうとしていますが、getIconは、() 'の代わりに' GradientDrawable'を返している 'と思われます'BitmapDrawable'のコードが動かないようにします。私はそれを変換する方法はありますか? – TychoTheTaco

関連する問題