2013-08-23 7 views
15

Ich habe ein Popup-Menü erstellt. Ich muss einen bestimmten Artikel aus dem Popup-Menü unter Bedingung verstecken, ich versuchte dies unter dem Code, aber es funktioniert nicht und zeigt "unerwartet wurde Ihre App gestoppt". Ich benutzte findViewById und setEnabled(false).Artikel aus Popupmenü ausblenden

Gibt es eine andere Möglichkeit, ein Element aus dem Popup-Menü auszublenden? Bitte helfen Sie mit.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 
     switch(item.getItemId()){ 
     case R.id.addMessage_Action: 
      AddMessage(); 
      break; 
     case R.id.dropMenuAction: 
      menuItemView = findViewById(R.id.dropMenuAction); 
      PopupMenu popup = new PopupMenu(this, menuItemView); 
      MenuInflater inflater = popup.getMenuInflater(); 
      inflater.inflate(R.menu.popupmenu_for_message_delete, popup.getMenu()); 
      popup.show(); 
      popup.setOnMenuItemClickListener(this); 
      if(Global.lock == true) 
       findViewById(R.id.lock_message).setEnabled(false); 
      else 
       findViewById(R.id.unlock_message).setEnabled(false); 

      break; 
     } 
     return false; 

    } 
+0

Was sagt Logcat? – Prmths

+1

Nullzeiger-Ausnahme in "findViewById (R.id.lock_message) .setEnabled (false);" –

Antwort

33

Sie müssen das Menu Objekt aus dem PopupMenu erhalten, bevor Sie das Einzelteil erhalten. Also würde es so etwas wie

Menu popupMenu = popup.getMenu(); 
if(Global.lock == true) 
    popupMenu.findItem(R.id.lock_message).setEnabled(false); 
else 
    popupMenu.findItem(R.id.unlock_message).setEnabled(false); 

Und ich würde dies tun, bevor Sie popup.show()

+3

'' getItem'' benötigt den Index als Argument, während '' findItem'' die ID benötigt. Also sollte das Beispiel wie folgt aussehen: "popupMenu.findItem (R.id.lock_message) .setEnabled (false);" – Hyndrix

+0

Sie haben Recht, danke für die Korrektur. Der ursprüngliche Beitrag wurde aktualisiert. – tim

+2

'popupMenu.findItem (R.id.lock_message) .setVisible (false);' wird funktionieren. :) – Chaitanya

9

nennen, ist diese Antwort auf jemand helfen,

Ich bin es gewohnt,

popupMenu.getMenu().findItem(R.id.next).setVisible(true); 

Wenn Sie den Text des Menüs ändern möchten, können Sie den folgenden Code verwenden:

popupMenu.getMenu().findItem(R.id.next).setTitle("After"); 
+1

Genau was ich brauchte, danke! –