2014-10-02 6 views
12

का उपयोग कर मैं इसजब कस्टम क्रिया दृश्य

@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); 
     ... 

की तरह मेरे ActionBar मेनूबार में से एक के लिए एक कस्टम दृश्य निर्धारित करते हैं लेकिन जब मैं अपने एप्लिकेशन में उस मेनू आइटम टैप करते हैं, onOptionsItemSelected() बुलाया नहीं प्राप्त करता है कहा जाता हो रही है नहीं onOptionsItemSelected। (मैंने विधि की शुरुआत में ब्रेकपॉइंट सेट करके इसे सत्यापित किया है)। यदि मैं अन्य बटन टैप करता हूं, तो एक्शन बार में, ऑप्शन इटैम चयन() को कॉल किया जाता है।

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

मैं भी मेनू xml फ़ाइल पर कार्रवाई दृश्य की स्थापना की कोशिश की है:

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

नोट: मैं जानता हूँ कि मैं कर सकते हैं

यहाँ rmy कस्टम दृश्य के लिए एक्सएमएल कोड है छवि क्लिक करने योग्य, और इसके लिए मैन्युअल रूप से ऑनक्लिक लिस्टनर सेट करें, लेकिन सीखने के लिए, मैं इसके नीचे जाना चाहता हूं।

+0

और आपकी 'ऑनऑप्शन इटैम चयन()' विधि कैसा दिखता है? – Sajmon

+0

इससे कोई फर्क नहीं पड़ता, मेरे पास विधि की शुरुआत में एक ब्रेकपॉइंट सेट है, और इसे बिल्कुल भी नहीं कहा जाता है। – Siavash

+0

क्या आपने 'setActionView' विधि को आजमाया है, जो दृश्य के बजाय संसाधन आईडी स्वीकार करता है, आप मैन्युअल रूप से फुलाते हैं? –

उत्तर

23

ऐसा लगता है कि अंतर्निहित कोड है कि अनावश्यक रूप से बढ़ा है और कार्यवाही आइटम ले जाती है, setActionView() द्वारा या android:actionLayout="@layout/image_container" द्वारा निर्धारित कस्टम लेआउट की सामग्री को कनेक्ट नहीं करता है।

शायद लेआउट कुछ भी है, और सिर्फ एक बटन या छवि को हो सकता है क्योंकि। तो मुझे आइकन के लिए मैन्युअल रूप से onClickListener सेट करना होगा। संगठन के प्रयोजन के लिए, मैं बस अपना आइकन के OnClick विधि से onOptionsItemSelected() कहते हैं, लेकिन मैं सिर्फ onClick विधि के अंदर कार्य निर्धारित कर सकते हैं।

पहले अपने Activity में filterMenuItem घोषणा करते हैं।

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

ऑनक्लिक विधि में आपको मेन्यूइटम चयन किया जाना चाहिए (0, फ़िल्टरमेनूइटम); इसके बजाय यदि आप ऑप्शन इटैम पर कॉल का प्रचार करना चाहते हैं तो अपनी गतिविधि के टुकड़ों में कार्यान्वयन के माध्यम से चयन किया गया। – Piaf

+1

एक्शनलेआउट का उपयोग करके मेरा आइटम क्लिक पर लहर से प्रतिक्रिया नहीं देता है, क्या यह डिफ़ॉल्ट व्यवहार है? –

+2

हां, यह निर्भर करता है कि आप कस्टम लेआउट में क्या डाल रहे हैं। बस अपनी छवि/छवि पर 'एंड्रॉइड: पृष्ठभूमि = "? Attr/selectableItemBackground" का उपयोग करें बटन अगर आप लहर प्रभाव चाहते हैं – behelit

-2

आप विधि और implemenet onPreareOptionsmenu oncreateoptionsmenu विधि के बजाय) menu.add कॉल करने के लिए (है। यह मेरा कोड है:

@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; 
    } 
+0

क्या आप विस्तृत कर सकते हैं? कॉल menu.add() कहां? – Siavash

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