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 Cloud Messaging - GCM - SERVICE_NOT_AVAILABLE
  • Diseño del menú emergente en Android 5.0
  • Dibujar objeto / imagen sobre lienzo
  • Evite borrar los datos de la base de datos al hacer clic en el botón "borrar datos" en la configuración de la aplicación en el dispositivo Android
  • Switchcompat no muestra el conmutador
  • ¿Buenas alternativas para compartir un complejo árbol de objetos entre actividades en Android?
  • 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.

  • Android Picasso Configurar el tamaño de LruCache
  • Adición de entradas específicas de la aplicación en el menú Configuración de Android
  • Automáticamente resuelve Android build Error: Los píxeles del marco deben ser sólidos o transparentes (no alfas intermedios). - Encontrado en el pixel # 4 a lo largo del borde superior
  • No se pueden crear archivos en Android con Xamarin
  • Android especificado para la propiedad 'signedConfig.storeFile' no existe
  • ¿Cómo usar PowerMock en proyectos de Android?
  • 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.