El submenú de la barra de acción no funciona con actionLayout

Hola Estoy desarrollando una aplicación para Android. En mi aplicación estoy usando ActionBarSherlock. He definido algunos elementos de menú en la barra de acción, de la siguiente manera:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/card_menu" android:title="cards" android:showAsAction="always" android:actionLayout="@layout/action_button" > <menu> <item android:id="@+id/C1" android:title="C1" /> <item android:id="@+id/C2" android:title="c2" /> <item android:id="@+id/C3" android:title="C3" /> </menu> </item> <item android:id="@+id/notification" android:title="Notifications" android:showAsAction="always" android:actionLayout="@layout/notification_icon" android:icon="@drawable/notification" /> <item android:id="@+id/filter" android:icon="@drawable/filter" android:title="Filter" android:showAsAction="always" /> 

Ahora, todo se muestra muy bien, pero mi problema es que cuando hago clic en un elemento card_menu en el que defino submenús y también definir un diseño de acción; No muestra los submenús.
Mis otros elementos del menú están funcionando correctamente. Sólo cuando defino un diseño de acción para mi elemento que contiene submenús en ese momento no puedo mostrar el submenú.
Si quito la disposición de la acción, entonces está trabajando muy bien …

Sé que si definimos un diseño de acción para un elemento, entonces tenemos que manejar manualmente el oyente de clics. Lo hice de la siguiente manera:

 final MenuItem item = menu.findItem(R.id.card_menu); item.getActionView().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onOptionsItemSelected(item); Toast.makeText(getActivity(), "click on menu", Toast.LENGTH_SHORT).show(); } }); 

Soy capaz de manejar el evento de clic para ese elemento, pero no puedo mostrar elementos del submenú desplegable.

¿Cómo resolver este problema? ¿Cómo puedo abrir mis submenús?

Necesito ayuda …. Gracias …

Tuve un problema similar y lo resolví con un truco usando un Spinner dentro de la barra de acción. Así que mi diseño de la barra de acción en res / menu es (action_share es importante):

 <item android:id="@+id/action_share" android:showAsAction="always" android:actionLayout="@layout/actionbar_spinner_export" /> 

En mi carpeta res / layout, pongo en actionbar_spinner_export:

 <Spinner xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/sp_export" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/actionbar_item_selector" /> 

Entonces en el onCreateOptionsMenu, conseguí este hilandero y agrego un ArrayAdapter a esto. Sólo puedo publicar el código en c #, ya que estoy trabajando con Xamarin.Android Cross Platform Development. Pero es casi lo mismo para Java:

 IMenuItem spinnerExport = menu.FindItem(Resource.Id.action_share); _sp_export = spinnerExport.ActionView.FindViewById<Spinner>(Resource.Id.sp_export); _sp_export.Adapter = new ExportAdapter(_parent, Resource.Layout.actionbar_export_row, new List<String>{"Drucken", "Als PDF", "Als Text", "Als Tabelle"}); 

Entonces en mi costumbre ExportAdapter, puse en getView la imagen, quiero mostrar (en este caso un icono de compartir). Y en getDropDownView, pongo todos mis artículos. Aquí está el código:

 class ExportAdapter : ArrayAdapter { private List<String> _objects = null; private Context _context = null; public ExportAdapter(Context context, int resourceId, List<String> objects) : base(context, resourceId) { _context = context; _objects = objects; } public override View GetView (int position, View convertView, ViewGroup parent) { convertView = ((Activity) _context).LayoutInflater.Inflate(Resource.Layout.actionbar_export_row, parent, false); TextView tv_text = convertView.FindViewById<TextView>(Resource.Id.tv_text); ImageView iv_image = convertView.FindViewById<ImageView>(Resource.Id.iv_image); RelativeLayout.LayoutParams lp_iv = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WrapContent, RelativeLayout.LayoutParams.WrapContent); lp_iv.AddRule(LayoutRules.CenterInParent); iv_image.LayoutParameters = lp_iv; iv_image.SetPadding(5,5,5,5); tv_text.Visibility = ViewStates.Gone; iv_image.SetImageResource(Resource.Drawable.ic_action_share); return convertView; } public override View GetDropDownView (int position, View convertView, ViewGroup parent) { convertView = ((Activity) _context).LayoutInflater.Inflate(Resource.Layout.actionbar_export_row, parent, false); TextView tv_text= convertView.FindViewById<TextView>(Resource.Id.tv_text); tv_text.Text = _objects.ElementAt(position); return convertView; } public override int Count { get { return _objects.Count(); } } public String getItemAtIndex(int position) { return _objects.ElementAt(position); } } 

De esta manera, tengo un Icono de barra de acciones, que se parece a un ítem de acción real. Y cuando hago clic en él, habrá los artículos en mi hilandero que aparece.

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