2013-02-18 77 views
5

हाय मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं। मेरे आवेदन में मैं एक्शनबार शेरलॉक का उपयोग कर रहा हूं। मैं कार्रवाई पट्टी में कुछ मेनू आइटम परिभाषित, निम्नलिखित तरीके से:एक्शन बार उप मेनू कार्रवाई के साथ काम नहीं कर रहा है

<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

मैं वही समस्या थी और एक चाल एक स्पिनर Actionbar अंदर उपयोग करने के साथ इसे हल। तो रेस में ActionBar के अपने लेआउट/मेनू है (action_share महत्वपूर्ण है):

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

मेरी रेस/लेआउट फ़ोल्डर में, मैं actionbar_spinner_export में डाल: onCreateOptionsMenu में फिर

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

, मैं इस स्पिनर को मिला और इसमें एक कस्टम ऐरे एडाप्टर जोड़ें। मैं केवल सी # में कोड पोस्ट कर सकता हूं, क्योंकि मैं Xamarin.Android क्रॉस प्लेटफार्म विकास के साथ काम कर रहा हूं। लेकिन इसकी लगभग जावा के लिए एक ही:

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

इस तरह, मैं एक ActionBar चिह्न है, जो एक वास्तविक ActionBar-आइटम की तरह दिखता है: यहाँ कोड है। और जब मैं उस पर क्लिक करता हूं, तो मेरे स्पिनर में दिखाए जाने वाले आइटम होंगे।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^