2011-11-09 4 views
5

MenuItemをメニューで更新しようとすると、IndexOutOfBoundsExceptionが発生します。Androidメニュー、onPrepareOptionsMenuを実行中に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に変更した後、appは例外を発生しません。魅力のように動作します。 – 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); 
関連する問題