Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


OnOptionsItemSelected no se llama cuando se usa la vista de acción personalizada

Configurar una vista personalizada para una de mis barra de herramientas Barra de menús como esta

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.loop_thread, menu); ImageView iv = (ImageView)(getLayoutInflater().inflate(R.layout.image_container, null)); menu.findItem(R.id.action_filter).setActionView(iv); ... 

Pero cuando onOptionsItemSelected() ese elemento de menú en mi aplicación, onOptionsItemSelected() no se llama. (He verificado esto a través de establecer un punto de interrupción al principio del método). Si toco otros botones, en la barra de acción, onOptionsItemSelected () se llama.

  • Google Maps v2 Marker zOrdering - Establecer en la parte superior
  • Cómo agregar un tarro en bibliotecas externas en el estudio android
  • Picasso carga de imagen de devolución de llamada
  • ¿Por qué hierarchyviewer no funciona para Samsung Galaxy TAB 7.0?
  • Cómo cambiar la fuente en el TextView?
  • Cómo medir el tiempo transcurrido
  • Aquí está el código xml para la vista personalizada rmy:

     <?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ibtnFilterMenu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/darker_gray" android:src="@drawable/btn_action_down_arrow" style = "@android:style/Widget.ActionButton"/> 

    También he intentado establecer la vista Acción en el archivo xml del menú:

      <item android:id="@+id/action_filter" android:title="@string/filter_options" android:actionLayout="@layout/image_container" android:orderInCategory="100" android:showAsAction="ifRoom" /> 

    Nota: Sé que puedo hacer que la imagen haga clic, y establecer manualmente un onClickListener para él, pero por el bien de aprender, quiero llegar al fondo de esto.

  • Ejemplo más simple de un fondo de pantalla Android en vivo
  • Cómo detectar un anillo de llamada saliente en Android usando la clase Visualizer?
  • Androide progreso dentro de edittext
  • ¿Cómo puedo ver qué wakelocks están activos?
  • ¿Por qué Android Studio no me permite crear clases Java?
  • Android: transforma un mapa de bits en una secuencia de entrada
  • 2 Solutions collect form web for “OnOptionsItemSelected no se llama cuando se usa la vista de acción personalizada”

    Parece que el código subyacente que infla y dibuja los elementos de acción, no conecta el contenido del diseño personalizado establecido por setActionView() o por el android:actionLayout="@layout/image_container" .

    Probablemente porque el diseño puede ser cualquier cosa, y sólo un botón o imagen. Así que tengo que configurar manualmente el onClickListener para el icono. Para el propósito de organización, sólo llamo onOptionsItemSelected() del método OnClick de mi icono, pero podría definir la acción dentro del método onClick .

    Primero, declare filterMenuItem en su Activity .

     MenuItem filterMenuItem; public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.loop_thread, menu); filterMenuItem = menu.findItem(R.id.action_filter); filterMenuItem.getActionView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MainActivity.this.onOptionsItemSelected(filterMenuItem); } }); 

    Usted tiene que llamar el método de menu.add () y implemenet onPreareOptionsmenu en vez de oncreateoptionsmenu método. Este es mi código:

     @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); if(mAlbum.getStatus() == Album.STATUS_VIDEO_AVAILABLE) { menu.add(0, 0 , 0, getString(R.string.edit_album)) .setIcon(R.drawable.edit_album_icon); menu.add(0, 1 , 0, getString(R.string.delete_album)) .setIcon(R.drawable.delete_album_icon); menu.add(0, 2 , 0, getString(R.string.download_video)) .setIcon(R.drawable.download_vdo_icon); menu.add(0, 3 , 0, getString(R.string.upload_to_ambivo)) .setIcon(R.drawable.share_ambivo_icon); menu.add(0, 4 , 0, getString(R.string.upload_to_facebook)) .setIcon(R.drawable.share_fb_icon); menu.add(0, 5 , 0, getString(R.string.upload_to_youtube)) .setIcon(R.drawable.share_yt_icon); } else{ MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.albummenu, menu); if(mAlbum.getAlbumType() == Album.COMPOSITE_VIDEOS) menu.findItem(R.id.convert_album).setVisible(false); } return true; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.