2013-08-23 13 views
15

Stworzyłem menu podręczne. Muszę ukryć konkretny element z menu podręcznego pod warunkiem, próbowałem tego poniżej kodu, ale to nie działa i pokazuje "nieoczekiwanie Twoja aplikacja została zatrzymana". Użyłem findViewById i setEnabled(false).Ukryj pozycję z popupmenu

Czy istnieje inny sposób na ukrycie elementu w menu kontekstowym? Pomóż w tym.

@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

Co mówi Logcat? – Prmths

+1

Wyjątek wskaźnika pustego w "findViewById (R.id.lock_message) .setEnabled (false);" –

Odpowiedz

33

Trzeba uzyskać Menu obiekt z PopupMenu zanim pojawi się element. Więc to byłoby coś

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); 

A ja Ci to wcześniej zadzwonić popup.show()

+3

'' getItem'' potrzebuje indeksu jako argumentu, podczas gdy '' findItem'' przyjmuje identyfikator. Tak więc przykład powinien wyglądać jak 'popupMenu.findItem (R.id.lock_message) .setEnabled (false);' ' – Hyndrix

+0

Masz rację, dziękuję za poprawkę. Zaktualizowano oryginalny wpis. – tim

+2

'popupMenu.findItem (R.id.lock_message) .setVisible (false);' będzie działać. :) – Chaitanya

9

Ta odpowiedź jest pomóc komuś,

jestem przyzwyczajony,

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

Jeśli chcesz zmienić tekst menu, możesz użyć poniższego kodu:

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

Po prostu to, czego potrzebowałem, dzięki! –