2012-03-15 11 views
12

मेरे पास Activity है ActionBarCompat कोड नमूना से लिया गया है और मैं रनटाइम पर मेनू आइटम (क्रियाएं) को दिखाने/छुपाने का प्रयास कर रहा हूं।एंड्रॉइड और एक्शनबार कॉम्पैम्प: प्री-आईसीएस उपकरणों पर रनटाइम पर कार्रवाइयों की दृश्यता कैसे बदलें?

मैं MenuItem पर setVisible() का उपयोग कर की कोशिश की है और आईसीएस के लिए काम करता है, लेकिन पूर्व आईसीएस में यह केवल मेनू आइटम (मेनू बटन प्रेस) जबकि ActionBar की दृश्यता को बदलने मेनू बदलाव की सूचना पाने नहीं है।

कोई समाधान? अग्रिम में धन्यवाद!

actionbarcompat परियोजना

की ActionBarHelperBase.java में ...

private View addActionItemCompatFromMenuItem(final MenuItem item) { 

final int itemId = item.getItemId(); 

....

इस वर्ग के प्रति के निर्माता:

+2

मुझे पता है कि यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन क्या आपने एक्शनबार शेरलॉक (http://abs.io) देखा है? आप पूर्व-आईसीएस उपकरणों पर मेनू आइटम की दृश्यता निश्चित रूप से बदल सकते हैं। भले ही आप अपने 'एक्शनबार' कार्यान्वयन को स्विच नहीं करना चाहते हैं, फिर भी आप ActionBarSherlock स्रोत में समाधान ढूंढ पाएंगे। – ashughes

+0

यह एक अच्छा विचार है। कोई संकेतक जहां किसी को देखना चाहिए? –

उत्तर

4

यह मैं कैसे इसे हल है ऑब्जेक्ट्स के गुण, लेकिन आइटम की आईडी कॉपी नहीं करते हैं, इसलिए इसे बाद में आईडी के साथ ढूंढना असंभव है।

तो मैं इसे उस विधि में कहा:

... 
actionButton.setId(itemId); 
... 

और एक ही कक्षा में मैं सिर्फ का उपयोग करें:

@Override 
public void hideMenuItemById(int id, boolean show){ 
    getActionBarCompat().findViewById(id).setVisibility(show? View.VISIBLE: View.GONE); 
} 

आशा है कि यह आप में मदद करता है।

+0

क्या आप कृपया अपने उत्तर पर विस्तार कर सकते हैं और थोड़ा और विवरण जोड़ सकते हैं। मैंने कोशिश की लेकिन इसे काम नहीं कर सका। क्या अन्य कदम शामिल हैं? –

+0

विधि से गतिविधि को नहीं कहा जा सकता है। कोई केवल ActonBarHelper से विधियों को कॉल कर सकता है। मैं यह नहीं समझ सकता कि इस कोड को कैसे काम करना चाहिए। – tobias

+0

कृपया कार्यान्वयन के लिए डेमो प्रोजेक्ट देखें https://github.com/AlienAsRoger/CourtDeadlines –

5

मैंने एक्शन बार आइटम के कई विकल्प/res/menu/के अंतर्गत कई विकल्प बनाए। मैं एक सदस्य को यह इंगित करता हूं कि मैं अभी किसका उपयोग कर रहा हूं। मेनू को बदलने के लिए, मैं फोन:

protected void setMenuResource(int newMenuResourceId) 
{ 
    _menuResource = newMenuResourceId; 
    invalidateOptionsMenu(); 
} 

और मैं onCreateOptionsMenu() को ओवरराइड:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    if (_menuResource != 0) 
    { 
     getSupportMenuInflater().inflate(_menuResource, menu); 
     return true; 
    } 
    return super.onCreateOptionsMenu(menu); 
} 

अब, अगर मैं कार्रवाई आइटम बदलना चाहते हैं, मैं फोन:

setMenuResource(R.menu.actionbar_menu_X); 
+0

ध्यान दें कि 'invalidateOptionsMenu()' केवल API 11 और ऊपर है। –

+0

यह एपीआई 10 के लिए शेरलॉक लाइब्रेरी द्वारा कार्यान्वित किया गया; इसे संगतता लाइब्रेरी में getActionBarHelper()। invalidateOptionsMenu() के रूप में भी कार्यान्वित किया जाता है। – Steelight

+1

इसे एक्शनबार हेल्पर क्लास में लागू नहीं किया गया है। क्या आप इसे अधिक विस्तार से समझा सकते हैं। – tobias

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