¿Cómo accedo a los elementos del menú?

Así que estoy tratando de agarrar mis elementos de menú fuera de la ActionBar y establecerlos en algunas variables para usar más tarde. A continuación se muestra un código de prueba básico que intenta establecer la variable durante la creación del menú de opciones. Cuando el lanza se bloquea con el error:

02-18 12:10:08.109: E/AndroidRuntime(30931): FATAL EXCEPTION: main 02-18 12:10:08.109: E/AndroidRuntime(30931): Process: com.example.slider2, PID: 30931 02-18 12:10:08.109: E/AndroidRuntime(30931): java.lang.IndexOutOfBoundsException: Invalid index 2131230720, size is 1 02-18 12:10:08.109: E/AndroidRuntime(30931): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 02-18 12:10:08.109: E/AndroidRuntime(30931): at java.util.ArrayList.get(ArrayList.java:308) 02-18 12:10:08.109: E/AndroidRuntime(30931): at com.android.internal.view.menu.MenuBuilder.getItem(MenuBuilder.java:656) 02-18 12:10:08.109: E/AndroidRuntime(30931): at com.example.slider2.MainActivity.onCreateOptionsMenu(MainActivity.java:22) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.app.Activity.onCreatePanelMenu(Activity.java:2538) 02-18 12:10:08.109: E/AndroidRuntime(30931): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:436) 02-18 12:10:08.109: E/AndroidRuntime(30931): at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:800) 02-18 12:10:08.109: E/AndroidRuntime(30931): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:221) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.view.Choreographer.doCallbacks(Choreographer.java:574) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.view.Choreographer.doFrame(Choreographer.java:543) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.os.Handler.handleCallback(Handler.java:733) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.os.Handler.dispatchMessage(Handler.java:95) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.os.Looper.loop(Looper.java:136) 02-18 12:10:08.109: E/AndroidRuntime(30931): at android.app.ActivityThread.main(ActivityThread.java:5017) 02-18 12:10:08.109: E/AndroidRuntime(30931): at java.lang.reflect.Method.invokeNative(Native Method) 02-18 12:10:08.109: E/AndroidRuntime(30931): at java.lang.reflect.Method.invoke(Method.java:515) 02-18 12:10:08.109: E/AndroidRuntime(30931): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 02-18 12:10:08.109: E/AndroidRuntime(30931): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 02-18 12:10:08.109: E/AndroidRuntime(30931): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:126) 02-18 12:10:08.109: E/AndroidRuntime(30931): at dalvik.system.NativeStart.main(Native Method) 

MainActivity.java

 public class MainActivity extends Activity { private MenuItem mRefresh; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); mRefresh = menu.getItem(R.id.refresh); return super.onCreateOptionsMenu(menu); } } 

Main_menu.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/refresh" android:icon="@drawable/ic_action_refresh" android:showAsAction="ifRoom" android:title="@string/refresh"/> </menu> 

¿Alguna idea sobre lo que estoy haciendo mal aquí? Tengo que ser capaz de manipular los elementos del menú más allá justo cuando se están aprovechando.

MenuItem.getItem (índice) toma el índice del elemento de menú en lugar de id del elemento de menú así que utilice MenuItem.findItem que toma el ID del ítem del menú como:

  mRefresh = menu.findItem(R.id.refresh); //item id OR mRefresh = menu.getItem(0); //item index 

getItem(int) devuelve un MenuItem en un índice específico, mientras que findItem(int) devuelve un MenuItem correspondiente al ID de recurso que se da. Llamar findItem lugar de getItem .

http://developer.android.com/reference/android/view/Menu.html#findItem(int)

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.