2017-05-09 8 views
8

मैं दिखाने/कुछ तार है कि मैं सही पर सेट किया जाएगा/strings.xml फ़ाइल पर झूठे के आधार पर एक Android आवेदन पर एक मेनू में से कुछ के लिए विकल्पों को छिपाना चाहते हैं।कैसे Android पर एक मेनू के विकल्पों parametrize के लिए?

एक उदाहरण के रूप में, मैं strings.xml फ़ाइल पर इन तार होगा:

<string name="option1">false</string> 
<string name="option2">true</string> 
<string name="option3">true</string> 

तो इस मामले में केवल option2 और option3 दिखाया जाना है।

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

    getMenuInflater().inflate(R.menu.main, menu); 

    if((getResources().getString(R.string.option1)).equals("false")){ 
     menu.getItem(R.id.option1).setVisible(false); 
    } 

    return true; 
} 

लेकिन option1 अभी भी मेनू पर दिखाया जा रहा है:

दूसरी ओर, मेरा मतलब है, कोड में, मैं निम्नलिखित की कोशिश की।

क्या मैं इन विकल्पों parametrize को क्या करना चाहिए? मैं तो बस इन विकल्पों को दूर कर सकता है, लेकिन मैं चाहते हैं कि भविष्य में अगर अपने ग्राहकों के लिए इन विकल्पों सक्रिय फिर से चाहते हैं, मैं इसे आसानी से सही को गलत मान परिवर्तित कर सकता है।

संपादित करें:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/option1" 
      android:title="Option 1" /> 
     <item 
      android:id="@+id/option2" 
      android:title="Option 2" /> 
     <item 
      android:id="@+id/option3" 
      android:title="Option 3" /> 
     .... 
    </group> 
</menu> 

अंतिम अद्यतन

मैं सूचना है कि मैं NullPointerException हो रही थी क्योंकि मेनू के नाम गलत था है: यहाँ मेरी मेनू है। मैंने इसे ठीक कर दिया है और अब यह मुझे कोई त्रुटि नहीं देता है।

लेकिन मेरी समस्या आता है क्योंकि मैं दो अलग अलग लेआउट कि दो अलग अलग मेनू (प्रत्येक लेआउट में एक) शामिल है और मैं एक स्ट्रिंग है जो प्रवेश पर आता है के आधार पर प्रत्येक लेआउट बढ़ा देते हैं।

उदाहरण के लिए

, यह देखते हुए कि स्ट्रिंग पहले लेआउट को बढ़ाने के लिए है "हैलो" के रूप में मेरे MainActivity की onCreate समारोह पर इस प्रकार मैं लेआउट प्रदर्शित:

if("hello".equals(stringForLayout)){ 
    setContentView(R.layout.activity_main); 
}else{ 
    setContentView(R.layout.activity_main_secondary); 
} 

कैसे मैं दोनों मेनू के विकल्पों parametrize कर सकते हैं ताकि अगर पहला दिखाया जा रहा है और मैं एक विकल्प छिपाना चाहता हूं, तो मैं उस मेनू के उस विकल्प को संदर्भित कर पाऊंगा?

अग्रिम धन्यवाद!

+1

@ user3728999 के रूप में, आप बेहतर मानक साझा संदर्भ समाधान के लिए जाना चाहते हैं। फिर तदनुसार अपने मेनू आइटम दृश्यता सेट करें। –

उत्तर

3

अंत में, मुझे पता चला कि मेरी समस्याएं कहां थीं।

समस्या आई क्योंकि मुझे पता नहीं था कि onCreateOptionsMenu और onPrepareOptionsMenu का उपयोग नहीं किया गया था इसलिए मैंने उन्हें हटा दिया।

इसके अलावा, के रूप में मैं एक NavigationView अंदर मेरे मेनू का उपयोग कर रहा था मैं उपयोग करने के लिए, के बाद मेरे MainActivity वर्ग, निम्न कथन की मेरी onCreate समारोह पर NavigationView बढ़ था:

navigationView.getMenu().findItem(R.id.option1).setVisible(false); 

वहाँ, मैं नहीं था मेरे मेन्यू आइटम को सफलतापूर्वक छिपाने में कोई समस्या है।

4

आप स्ट्रिंग्स (जैसे एस 1 & s2) का उपयोग करते हैं, तो आप उन्हें इस तरह की तुलना करने के लिए है:

अगर (s1.equals (s2)) {...}

Btw आप .: कर सकते हैं क्लीनर समाधान प्राप्त करने के लिए एंड्रॉइड दस्तावेज़ों में साझा प्राथमिकताओं को भी देखें। वहां आप विभिन्न मेनू विकल्पों के लिए बूलियन चर परिभाषित कर सकते हैं।

+0

ओएमजी! मुझे विश्वास नहीं है कि मैंने यह गलती की है। जावा में प्रोग्रामिंग के बिना कुछ समय और मैं शुरुआती गलतियों पर लौट आया :(लेकिन मुझे एक और संदेह है, जब मैं मेनू बनाने की कोशिश करता हूं तो झूठी दिखाई देता है मुझे निम्न त्रुटि मिलती है: 'java.lang.NullPointerException: इंटरफ़ेस विधि का आह्वान करने का प्रयास' android.view.MenuItem android.view'। मैंने 'getItem' और' findItem 'दोनों के साथ प्रयास किया लेकिन दोनों के साथ मुझे एक ही त्रुटि मिलती है। क्या मुझे दूसरी जगह की तुलना करना चाहिए? –

+0

क्या आप xml को भी पोस्ट कर सकते हैं मेनू? – user3728999

+0

मैंने मेनू का एक्सएमएल जोड़ा है। –

0

इस प्रयास करें यदि आप एक विशिष्ट गतिविधि के लिए एक विशिष्ट मेनू आइटम को छिपाना चाहते हैं।

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuItem mSearch = menu.findItem(R.id.mSearch); 
     mSearch.setVisible(false); 
     invalidateOptionsMenu(); 
} 
संबंधित मुद्दे