2013-04-19 8 views
12

मैंने स्टैक ओवरफ़्लो पर प्रश्नों को देखा है और समाधान नहीं ढूंढ पा रहा है।एक्शन बार पर मेनू आइटम छुपाने और दिखाने की कोशिश कर रहे हैं

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.themenu, menu); 
    MenuItem item = menu.findItem(R.id.menu_settings); 
    MenuItem item2 = menu.findItem(R.id.menu_save); 
    item.setVisible(isdown); 
    item2.setVisible(isdown); 
    return true; 
} 

यह मेरे मेनू आइटम को दृश्यमान (आइटम 1 और आइटम 2) पर सेट करता है। ऑनक्लिक ठीक काम करता है

public void inflateTextarea() { 
    if(isdown == true) { 
     isdown = false; 
     LinearLayout tl = (LinearLayout)findViewById(R.id.content); 
     tl.setVisibility(View.VISIBLE); 
     ScaleAnimation scale = new ScaleAnimation(1, 1, 0, 1); 
     scale.setFillAfter(true); 
     scale.setDuration(500); 
     tl.startAnimation(scale); 
    } 
} 

फिर यह मेरे आइसडाउन बूलियन को झूठा सेट करता है। ढेर लोगों का कहना है कि ऑनपेरेपॉप्शनमेनू हर बार जब मैं क्लिक करता हूं तो आग लगनी चाहिए लेकिन ऐसा नहीं है। मैं onclick समारोह

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.menu_settings: 
      Log.v("Log:","edit_item pressed"); 
      return true; 
    } 
} 

पर एक मेनू आइटम को छिपाने के लिए कर रहा हूँ लेकिन मैं कई मेनू आइटम है कि मैं छिपाने की आवश्यकता और दूसरों है कि मैं दिखाने के लिए चाहते हैं। मैं इस बारे में कैसे जा सकता हूं?

उत्तर

19

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

isDown को गलत करने के बाद मूल्य बदलने के बाद, आपको invalidateOptionsMenu() पर कॉल करने की आवश्यकता है जो onPrepareOptionsMenu() पर कॉल करके मेनू को फिर से लॉन्च करेगा।

मेनू आइटम बनाने के लिए इस कोड का प्रयास करें unvisible:

... 
isdown = false; 
invalidateOptionsMenu(); 
... 
+0

हाँ मुझे पता है, लेकिन जैसा कि मैंने ऑनपेरेपॉप्शनमेनू (मेनू मेनू) को पढ़ा है {हर बार एक मेनू आइटम पर क्लिक किया जाता है और यह काम करेगा। जब तक मेरे पास फ़ंक्शन में मेनू मेनू नहीं है, तब तक मैं दृश्यता सेट नहीं कर सकता, इसलिए वह जगह है जहां मुझे कोई समस्या है – Dnaso

+0

मैं देखता हूं। इसे कवर करने के लिए संपादित पोस्ट। – tbkn23

+0

एएचएचएच जो मैं खोज रहा था। अगर मैं बीमार स्वीकार करता हूं तो मैं कोशिश करूंगा धन्यवाद। – Dnaso

11

इस प्रयास करें, onCreateOptionsMenu() क्रियान्वित तो बाद

private Menu menu=null; 
@Override 
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) 
{ 
    inflater.inflate(R.menu.note_menu, menu); 
    this.menu=menu; 
super.onCreateOptionsMenu(menu,inflater); 
menu.findItem(R.id.menuChartNoteEdit).setVisible(isdown); 
menu.findItem(R.id.menuChartOpenNote).setVisible(isdown); 
} 

आप किसी भी जहां पर मेनू को छिपाने के लिए चाहते हैं, तो बस के लिए मान परिवर्तित isdown और इस कोड को दोहराएं,

menu.findItem(R.id.menu_settings).setVisible(isdown); 
menu.findItem(R.id.menu_save).setVisible(isdown); 
+0

मैंने सुना है कि ऑनपेरेपॉप्शनमेनू बेहतर होना चाहिए था, क्या आप जानते हैं कि अंतर क्या है? – Dnaso

+0

ठीक है तो अब मैं अपना मेनू डाल सकता हूं। मेरी कक्षा में किसी भी फ़ंक्शन में आइटम ढूंढें? – Dnaso

+0

हां, अपनी कक्षा में कहीं भी मेनू आइटम ढूंढें और छुपाएं/दिखाएं ..!, क्या आप इसे जांच रहे हैं? –

0

public boolean onPreparePanel(int featureId, View view, Menu menu) { 
    if(isLeftMenuOpened()) return false; 
    return super.onPreparePanel(featureId, view, menu); 
} 

विधि FragmentActivity.onPreparePanel सभी संलग्न टुकड़े के लिए मेनू बनाता है अपने FragmentActivity में यह कोशिश करो। मेनू को प्रदर्शित करने के लिए आपको सही वापस करना होगा; यदि आप झूठी वापसी करते हैं तो यह नहीं दिखाया जाएगा।

0

मेरे पास दो आइटम वाले मेनू हैं, पहले: आइटम सहेजें, दूसरा: आइटम संपादित करें। मैं चाहता था कि जब मैं संपादित करने आया, पहले "आइटम सहेजें" छुपाया गया था, और जब मैं "आइटम संपादित करें" पर क्लिक करता हूं, तो "आइटम सहेजें" दिखाया गया था।

तो:

  1. में इसे करने के लिए सार्वजनिक
  2. निर्धारित मूल्य में एक आइटम की घोषणा onCreateOptionsMenu(Menu menu, MenuInflater inflater)
  3. सेट दृश्यता isHidden()
  4. तो हर मैं कहाँ था, सेट दृश्यता को isVisible()
को

सार्वजनिक क्षेत्र:

MenuItem saveItem; 

onCreateOptionsMenu:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_detail_products, menu); 
    saveItem = (MenuItem) menu.findItem(R.id.action_detail_product_save); 
    saveItem.setVisible(isHidden()); 
} 

मैं कहाँ हैं:

saveItem.setVisible(isVisible()); 

अंत में यह काम करता है के रूप में मैं चाहता था।

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