2012-01-27 18 views
35

Yani, bilmek istediklerim bu. Android'de menünün görünürlüğünü nasıl ayarlayabilirim ?? Bu benim menü nasıl:Programatik olarak menüde ayarlama görünürlüğü

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

Ama bu kod onCreate üzerinde değil, bu yüzden programlı (benim durumumda, benim istediğim bir öğe görünür veya görünmez set "menuregistrar" nasıl bilmiyorum . sonsuza kadar uygulamayı tescil ve sonra görünmez olmak

cevap

106

koyun bu yöntem Activity

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

daha kısa sürümde yazabilirsiniz:

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

İki ipuçları: 1.you kayıt 'yazarak bu kadar sıkabilirsiniz. setVisible (userNotRegistered); '2. Boolean değişkenleri genellikle pozitiftir, yani eğer (! userRegistered)'. 'if (! UsersNotRegistered)' anlamak zor: kullanıcı NOt kayıtlı değil ise? –

+1

@ W.K.S kabul etti. Yorum için teşekkürler. –

2

public boolean onPrepareOptionsMenu (Menu menu) kullanın, menü düğmesine bastığınızda ve eşyalarınızı orada yaptığınızda her zaman denir. veya farklı menülerinizi şişirmek için farklı etkinliklerde oncreateoptionsmenu() kullanın - bu sadece bir kez çağrılır.

Alkış

+1

onPrepareOptionsMenu ayrıca invalidateOptionsMenu çağırdığınızda her zaman denir, bu yüzden bir kereden fazla çağrılabilir. – javahead76

+0

@ javahead76 bu çağrı sadece 'Build.VERSION.SDK_INT> = 11' –

6

aşağıdaki ile daha da Adil'in çözümünü kolaylaştırmak olacaktır:

güzel cevap için
public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem registrar = menu.findItem(R.id.menuregistrar);  
    registrar.setVisible(!isRegistered); 
    return true; 
} 
+1

ise işe yarayacaktır. İyi ama bazı yeni kullanıcılar acele ediyorlar ve en kısa zamanda çözüldükleri problemi bulmak istiyorlar. orada gerçekte neler olduğunu göstermek için. :) –

+1

@AdilSoomro, bu kod sizin cevabınızdan daha basittir (ve eğer daha acele ediyorlarsa daha uygunsa)), bu yüzden orijinal cevabı düzenlemeyi öneririm. – Stan

İlgili konular