Я пытаюсь изменить значки пунктов меню в своем навигационном представлении, когда их нажимают. Для этого я использую следующий метод: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 пункта меню, которые я нажал. Я не понимаю, что происходит. Журналы ясно показывают, что он только устанавливает цвет фона один раз, так почему 3 из них получают набор?
Кажется, что любой элемент ящика, который я добавляю в оператор switch, заставляет предыдущие 3 элемента также изменять цвета фона. Что происходит?
EDIT
Если я заменить код в операторе переключателя, а просто добавить задержку, кажется, работает:
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