2011-11-09 9 views
5

Cuando trato de actualizar mi MenuItem en el menú, recibo IndexOutOfBoundsException.Menú de Android, lanzando IndexOutOfBoundsException mientras se ejecuta enPrepareOptionsMenu

He añadido menu_item en xml y puedo verlo cuando enable() == false.

Mi código:

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

Cómo lidiar con el problema?

Saludos.

+2

Es posible que desee llamar a 'super.onPrepareOptionsMenu' antes de acceder a su contenido. También use 'Menu.findItem' en su lugar. – harism

+1

Ok, después de cambiar getItem a findItem, la aplicación no tiene una excepción. Funciona de maravilla. – neciu

Respuesta

1

Probablemente tiene que limpiar su proyecto para actualizar los valores de R. Si prefiere otra forma, puede hacerlo

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

u optar por una más bella

menu.findItem (R .id.menu_item);

37

Acabo de tener el mismo problema. Ocurre si usa accidentalmente getItem() en lugar de findItem().

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