2011-11-09 3 views
5

메뉴에서 MenuItem을 업데이트하려고하면 IndexOutOfBoundsException이 수신됩니다.onPrepareOptionsMenu를 실행하는 동안 Android 메뉴가 throw되는 IndexOutOfBoundsException

xml에 menu_item을 추가했으며 enable() == false로 볼 수 있습니다.

내 코드 :

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

가 어떻게 문제를 해결하기 위해?

건배.

+2

내용에 액세스하기 전에'super.onPrepareOptionsMenu'를 호출 할 수 있습니다. 대신에'Menu.findItem'을 사용하십시오. – harism

+1

좋아, getItem을 findItem으로 변경 한 후 앱이 예외를 발생시키지 않습니다. 매력처럼 작동합니다. – neciu

답변

1

아마 당신은 당신이

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

을 수행 할 수 있습니다 또는 (더 아름다운

menu.findItem에 대한 R을 선택하는 다른 방법을 선호하는 경우 R. 의 값을 업데이트하는 프로젝트를 청소해야 .id.menu_item);

37

같은 문제가있었습니다. 실수로 findItem() 대신 getItem()을 사용하면 발생합니다.

MenuItem menuItem= menu.findItem(R.id.menu_item); 
관련 문제