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);
我正在尝试为特定的菜单项设置特定的用户名,然后使用
获取它 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);