IndexOutOfBoundsException:获取菜单项(溢出图标)项的标题时

IndexOutOfBoundsException: while getting title of menu item (overflow icon) items

我正在尝试为特定的菜单项设置特定的用户名,然后使用

获取它
  LoggedUser = (String) menu.getItem(R.id.User).getTitle().toString();

喜欢:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.User).setTitle("username");
    LoggedUse0r=(String) menu.getItem(R.id.User).getTitle().toString();
    invalidateOptionsMenu();
    return super.onPrepareOptionsMenu(menu);
}

我声明了

invalidateOptionsMenu();

采用不同的方法,例如

onCreate(), onStart(), onResume()

但是,我的应用程序崩溃并出现以下异常:

11-02 07:44:52.112 8714-8714/com.example.prof_mohamedatef.listview E/AndroidRuntime: FATAL EXCEPTION: main java.lang.IndexOutOfBoundsException: Invalid index 2131492986, size is 4 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) at java.util.ArrayList.get(ArrayList.java:304) at android.support.v7.view.menu.MenuBuilder.getItem(MenuBuilder.java:729) at com.example.prof_mohamedatef.listview.Booking_hotels.onPrepareOptionsMenu(Booking_hotels.java:194) at android.app.Activity.onPreparePanel(Activity.java:2570) at android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:532) at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:521) at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:93) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onPreparePanel(AppCompatDelegateImplBase.java:355) at android.support.v7.app.AppCompatDelegateImplV9.preparePanel(AppCompatDelegateImplV9.java:1380) at android.support.v7.app.AppCompatDelegateImplV9.doInvalidatePanelMenu(AppCompatDelegateImplV9.java:1633) at android.support.v7.app.AppCompatDelegateImplV9.access0(AppCompatDelegateImplV9.java:93) at android.support.v7.app.AppCompatDelegateImplV9.run(AppCompatDelegateImplV9.java:129) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5283) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) at dalvik.system.NativeStart.main(Native Method)

谁能body告诉我获取项目标题的字符串有什么关系 这种类型的异常:

IndexOutOfBoundsException:

我们将不胜感激,提前致谢

您正在将 View ID 传递给 menu.getItem(R.id.User)。根据文档

MenuItem getItem (int index)

Gets the menu item at the given index.

所以改为这样使用它:

menu.getItem(0...3);    // since the size of menu items is 4.

试试这个。

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.your_menu, menu);

    MenuItem item = menu.findItem(R.id.your_menu_item);
    String loggedInUser = item.getTitle().toString();
    return true;
}

我在使用 findItem() 而不是 getItem().

后解决了这个问题

所以这将解决您的问题:

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