2012-01-27 9 views
35

तो, मैं यही जानना चाहता हूं। मैं Android में प्रोग्रामेटिक रूप से मेनू की दृश्यता कैसे सेट कर सकता हूं ?? इस तरह मैं अपने मेनू है:मेनू प्रोग्रामेटिक एंड्रॉइड में दृश्यता सेट करें

public boolean onCreateOptionsMenu(Menu menu){ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected (MenuItem item){ 
    switch (item.getItemId()){ 
     case R.id.menuregistrar: 
      break; 
     case R.id.menusalir: 
      break; 
    } 
    return true; 
} 

लेकिन इस कोड onCreate पर नहीं है, इसलिए मुझे पता है कि एक आइटम दृश्य या अदृश्य सेट करने के लिए प्रोग्राम के रूप में (मेरे मामले में, मैं चाहता हूँ "menuregistrar" नहीं है । अदृश्य छोटा संस्करण में अपने Activity

public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem register = menu.findItem(R.id.menuregistrar);  
    if(userRegistered) 
    {   
     register.setVisible(false); 
    } 
    else 
    { 
     register.setVisible(true); 
    } 
    return true; 
} 

में एक बार मैं अपने आवेदन पंजीकृत है और हमेशा के लिए करना पड़ रहा है

उत्तर

106

रखें इस प्रक्रिया में लिख सकते हैं:

MenuItem register = menu.findItem(R.id.menuregistrar);  
register.setVisible(!userRegistered); //userRegistered is boolean, pointing if the user has registered or not. 
return true; 
+0

अच्छा जवाब के लिए +1 ... – Lucifer

+2

दो सुझाव: 1.you लेखन 'रजिस्टर से कि ऊपर कस कर सकते हैं। सेट विज़िबल (userNotRegistered); '2. बूलियन वेरिएबल्स आमतौर पर सकारात्मक होते हैं अर्थात' if (! userRegistered) '। 'अगर (! उपयोगकर्ता नामांकित नहीं) 'समझना मुश्किल है: यदि उपयोगकर्ता पंजीकृत नहीं है? –

+1

@ डब्लू.के.एस. सहमत हुए। टिप्पणी के लिए धन्यवाद। –

2

public boolean onPrepareOptionsMenu (Menu menu) का उपयोग करें इसे हर बार जब आप मेनू बटन दबाते हैं और वहां अपनी सामग्री करते हैं। या अलग-अलग मेनू को बढ़ाने के लिए विभिन्न गतिविधियों में अपने oncreateoptionsmenu() का उपयोग करें - इसे केवल एक बार कहा जाता है।

चीयर्स

+1

onPrepareOptionsMenu को किसी भी समय आप अवैध ऑप्शनमेनू कहते हैं, इसलिए इसे एक से अधिक बार कहा जा सकता है। – javahead76

+0

@ javahead76 यह कॉल केवल तभी काम करेगा यदि 'Build.VERSION.SDK_INT> = 11' –

6

मैं निम्नलिखित के साथ आगे भी आदिल के समाधान को आसान बनाने में होगा:

public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem registrar = menu.findItem(R.id.menuregistrar);  
    registrar.setVisible(!isRegistered); 
    return true; 
} 
+1

यह अच्छा है, लेकिन कुछ नए उपयोगकर्ता इसे प्राप्त नहीं करेंगे, क्योंकि वे जल्दबाजी में हैं और समस्या हल करने में समस्या चाहते हैं, इसलिए मैंने व्यय किया यह दिखाने के लिए कि वास्तव में क्या हो रहा है। :) –

+1

@AdilSoomro, यह कोड आपके उत्तर की तुलना में सरल है (और यदि वे "जल्दी में हैं") अधिक सुविधाजनक है, तो मैं मूल उत्तर को संपादित करने का सुझाव दूंगा। – Stan

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

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