2011-11-09 9 views
5

Khi tôi cố gắng cập nhật MenuItem trong menu, tôi nhận được IndexOutOfBoundsException.Trình đơn Android, ném IndexOutOfBoundsException trong khi chạy trênPrepareOptionsMenu

Tôi đã thêm menu_item vào xml và tôi có thể thấy nó khi bật() == false.

Mã của tôi:

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

Làm thế nào để đối phó với vấn đề này?

Chúc mừng.

+2

Bạn có thể muốn gọi 'super.onPrepareOptionsMenu' trước khi truy cập nội dung của nó. Thay vào đó, hãy sử dụng 'Menu.findItem'. – harism

+1

Ok, sau khi thay đổi getItem thành findItem, ứng dụng không có ngoại lệ. Làm việc như một say mê. – neciu

Trả lời

1

Có lẽ bạn cần phải làm sạch dự án của bạn để cập nhật các giá trị của R. Nếu bạn thích một cách khác, bạn có thể làm

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

hoặc lựa chọn một đẹp hơn

menu.findItem (R .id.menu_item);

37

Chỉ có cùng một vấn đề. Xảy ra nếu bạn vô tình sử dụng getItem() thay vì findItem().

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