2011-11-09 5 views
5

Podczas próby zaktualizowania menuItem w menu otrzymuję wyjątek IndexOutOfBoundsException.Menu systemu Android, rzucając wyjątek IndexOutOfBoundsException podczas pracy naPrepareOptionsMenu

Dodałem menu_item w xml i widzę je, gdy włączone() == false.

Mój kod:

public boolean onPrepareOptionsMenu(Menu menu) { 
    if (enable()) { 
     MenuItem menuItem= menu.getItem(R.id.menu_item); 
     menuItem.setEnabled(true); 
    } 
    return super.onPrepareOptionsMenu(menu); 
} 

Jak radzić sobie z tym problemem?

Pozdrawiam.

+2

Możesz chcieć wywołać 'super.onPrepareOptionsMenu' przed uzyskaniem dostępu do jego zawartości. Zamiast tego użyj "Menu.findItem". – harism

+1

OK, po zmianie getItem na findItem, aplikacja nie przyjmuje wyjątków. Działa jak marzenie. – neciu

Odpowiedz

1

Prawdopodobnie trzeba oczyścić swój projekt w celu zaktualizowania wartości R. Jeśli wolisz inny sposób, można zrobić

for(int i = 0; i<menu.size();++i) 
{ 
    if(menu.getItem(i).getItemId() == R.id.menu_item) 
     MenuItem menuItem = menu.getItem(i); 
} 

lub zdecydować się na bardziej piękne

menu.findItem (R .id.menu_item);

37

Po prostu miałem ten sam problem. Dzieje się tak, gdy przypadkowo użyjesz getItem() zamiast findItem().

MenuItem menuItem= menu.findItem(R.id.menu_item);