クリックしたときにナビゲーションビューでメニュー項目のアイコンを変更しようとしています。問題は、私は最初の項目をクリックしたときに、それが正しく白にすべてのアイコンをリセットしますが、それはアクセントカラーと、選択したアイコンを設定していることである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
もう一つは、代わりに色を変える、私はタイトルテキストを変更した場合、それが正常に動作していることです。
私は項目ごとに異なる選択した色を持ってしようとしているので、この文句を言わない仕事 – TychoTheTaco