2013-06-17 9 views
0

У меня есть панель действий, в котором я динамически ударяя значок изображения на основе нескольких предварительных условий, как это:MenuItem.setIcon (R.id) не работает

if(atPosition == null & parentActivity.isLocationFixed()) 
setActionButton(R.id.menu_plant, R.drawable.ic_menu_plant); 
else 
setActionButton(R.id.menu_plant, R.drawable.ic_menu_plant_disabled); 

В setActionButton я просто найти подходящий объект и set icon к нему:

MenuItem item = menu.findItem(menuId); 
item.setIcon(iconRes); 

И теперь странные вещи: это работает для всего моего приложения, кроме одного места. Я попытался войти в систему, что входит внутрь, но идентификатор этого значка правильный - setIcon() просто не устанавливает этот значок. Я дважды проверял ресурсы значков, идентификатор ресурса (я попробовал его с другими значками ...), но он ничего не устанавливает. Есть ли кеш или что-то, что влияет на это поведение? Я получаю с ума, что :(

EDIT - некоторый код:. Pastebin 1 - это работает Pastebin 2 - это не работает

EDIT 2 - это как раз о SetIcon() Когда я пытаюсь setEnabled.(), она работает - так что я уверен, что я звоню его по пункту меню правой

+0

Если это влияет только на «одно место», то опишите это «одно место» больше. Является ли код другим? Какие действия предпринимает пользователь, когда он не работает? –

+0

Не могли бы вы опубликовать фактический код, который терпит неудачу, а не общую идею? Например, как вычисляется 'menuId' (или эквивалент)? –

+0

Нет разницы в коде между «этим» и «другими местами». Ни одна нить, ничего. MenuId определяется в xml, как и другие, я попытаюсь использовать некоторый код, но на самом деле ничего не видно:/ – shmoula

ответ

-2

Использование this.It работы

 @Override 
     public boolean onMenuItemSelected(final int featureId, final android.view.MenuItem item) 
     { 

      switch (item.getItemId()) { 

      case R.id.icon: //menuitem id 

       Drawable iconRes = getDrawable().getResources(R.darawable.new-icon); 
       item.setIcon(iconRes); 
         return false; 
      } 
+2

спасибо, но это не имеет никакого отношения к моему вопросу;) – shmoula

1

Ну, у меня есть такая же проблема, и в соответствии с.. эта ссылка: http://androiddev.orkitra.com/?p=58276 (который также содержит ваш вопрос), кажется, что вызов invalidateOptionsMenu() и seticon более гарантированно работает, чем seticon из другого места (я тестировал его, и он работает безупречно, хотя я должен сказать, что это дорогостоящая операция для перерисуйте весь actionBar каждый раз, когда вы хотите изменить простой значок меню).

Смежные вопросы