2013-02-18 5 views
5

こんにちは私はアンドロイドアプリケーションを開発しています。私のアプリケーションでは、私はActionBarSherlockを使用しています。アクションバーのサブメニューがactionLayoutで動作しません

<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" 
/> 

、すべてが非常によく表示されますが、私の問題は、私は、私はサブを定義card_menu項目をクリックしたときということです:私は、以下の方法で、アクションバーにいくつかのメニュー項目を定義しましたアクションレイアウトを定義することもできます。それらのサブメニューは表示されません。
他のメニュー項目が正しく機能しています。私がそのサブメニューを含むアイテムのアクションレイアウトを定義するときだけ、私はサブメニューを表示することができません。
アクションレイアウトを削除した場合、正常に動作しています...

アイテムのアクションレイアウトを定義すると、クリックリスナを手動で処理する必要があります。この問題を解決する方法

..私は、ドロップダウンサブメニュー項目を表示することができないその項目のクリックイベントを処理することができるけど、

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(); 
     } 
     }); 

:私は次のようにことをやりましたか?サブメニューを開くにはどうしたらいいですか?ヘルプ

は....私は同様の問題を持っていたし、スピナーアクションバーの内側を使用してトリックでそれを解決し

答えて

0

...ありがとう。 だからRES /メニューのアクションバーの私のレイアウトは(action_shareが重要である)である:

私のres /レイアウトフォルダで
<item android:id="@+id/action_share" 
    android:showAsAction="always" 
    android:actionLayout="@layout/actionbar_spinner_export" /> 

、私は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" /> 

次にonCreateOptionsMenuで、Iこのスピナーを手に入れ、これにカスタムのArrayAdapterを追加します。私はXamarin.Androidクロスプラットフォーム開発で作業しているので、私はC#でコードを投稿することができます。しかし、そのほとんど同じ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"}); 

はその後、私のカスタムExportAdapterに、私はgetViewメソッドで画像を入れて、私は(この場合には、株式のアイコン)を表示したいです。そしてgetDropDownViewでは、私はすべてのアイテムを置いています。

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); 
    } 
} 

この方法では、私はアクションバーのアイコンを持って、実際のアクションバー項目のようになります。ここでは、コードです。それをクリックすると、スピナーのアイテムが表示されます。

関連する問題