Android: Obtener una vista Referencia a un elemento de menú

Planeo utilizar el patrón de UI de acciones rápidas en mi aplicación. Patrón de interfaz de usuario de las acciones rápidas de Android . La ventana de acción rápida necesita una vista de pivote para seguir.

quickAction.show(View pivotView); 

Tengo la intención de utilizar la acción rápida para el elemento del menú, puedo obtener acceso al elemento que se hace clic. Pero el problema es que tengo que hacer referencia a una vista desde el elemento del menú para que pueda pasar a la acción rápida.

¿Cómo puedo obtener referencia a una vista en el menú que está seleccionado.

Usted puede lograr esto proporcionando su elemento de menú con una propiedad actionViewClass en xml y luego usted será capaz de obtener la vista pivote u quería. El código sería algo como esto

 <item android:id="@+id/menu_find" android:showAsAction="ifRoom" android:actionViewClass="android.widget.ImageButton" /> 

En su OnCreateOptionsMenu hacer esto

 public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.menu_search, menu); locButton = (ImageButton) menu.findItem(R.id.menu_find).getActionView(); locButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub createPopup(); mQuickAction.show(v); } }); return true; } 

Pregunta anterior, pero encontré algunos problemas con el atributo actionViewClass . Para cualquiera que se enfrente a esto más tarde …

Llamar findViewById(R.id.mnu_item) en onOptionsItemSelected devolverá un ancla View .

QuickActions en el MenuItems no son un buen diseño, pero encontré que son la forma más sencilla de implementar submenús con fondos personalizados.

Una actualización para cualquiera que quiera encontrar el elemento de vista de menú por otras razones (como yo quería).

Si tienes acceso y usas la barra de herramientas de AppCompat hay una manera. No es la forma más eficiente, pero es la forma más fácil que he encontrado para acceder a la vista del elemento de menú.

 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); // Find Menu for (int toolbarChildIndex = 0; toolbarChildIndex < toolbar.getChildCount(); toolbarChildIndex++) { View view = toolbar.getChildAt(toolbarChildIndex); // Found Menu if (view instanceof ActionMenuView) { ActionMenuView menuView = (ActionMenuView) view; // All menu items for (int menuChildIndex = 0; menuChildIndex < menuView.getChildCount(); menuChildIndex++) { ActionMenuItemView itemView = (ActionMenuItemView) menuView.getChildAt(menuChildIndex); // Do something to itemView... } } } } 

En la clase de actividad principal, es mejor anular el método onOptionsItemSelected (…); Debe ser algo como a continuación:

 public boolean onOptionsItemSelected(MenuItem item) { // the id is of type int int someId = item.getItemId(); // can use an if() or switch() statement to check if id is selected //a Toast message can be used to show item is selected } 
  • Problema de renderización de ViewPager personalizado en ciertos dispositivos:
  • ¿Cómo crear Clone-Duplicate View?
  • ExpandableListView - ¿Es posible la expansión condicional?
  • Agregue un onClickListener en Default GroupIndicator en ExpandableListView
  • ANR en SurfaceView en dispositivos específicos solamente - La única solución es un tiempo de sueño corto
  • El vídeo no se reproduce correctamente en el listview de android
  • Ver - buscando un evento como en (Ver) Destruido
  • Android ClassCastException al recuperar Vista personalizada
  • Cuál es la ventaja de usar el espacio sobre la vista
  • Android ExpandableListView - establece cierto grupo para no expandible
  • Android define la altura y el ancho de Vista personalizada mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.