2012-01-27 2 views
35

Итак, это то, что я хочу знать. Как я могу настроить видимость меню программно в Android? Вот как у меня есть меню:Установите видимость в Меню программно андроид

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

Но этот код не на OnCreate, так что я не знаю, как установить один элемент видимым или невидимым программным (в моем случае, я хочу «menuregistrar» ., чтобы быть невидимым, как только я зарегистрировал мое заявление и навсегда

ответ

106

Put этот метод в вашем Activity

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

в короткой версии вы могли бы написать:

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

Два советов: 1.you может затянуть, что до записи 'зарегистрироваться. setVisible (userNotRegistered); '2. Булева переменная обычно положительна, т.е.' if (! userRegistered) '. 'if (! UsersNotRegistered)' трудно понять: если пользователь НЕ зарегистрирован? –

+1

@ W.K.S согласился. Спасибо за комментарий. –

2

Используйте public boolean onPrepareOptionsMenu (Menu menu), он называется каждый раз, когда вы нажимаете кнопку меню и делаете свой материал там. или используйте свой oncreateoptionsmenu() в разных действиях, чтобы раздуть разные меню - этот вызов называется только один раз.

Приветствие

+1

onPrepareOptionsMenu также вызывается в любое время, когда вы вызываете invalidateOptionsMenu, поэтому его можно вызвать более одного раза. – javahead76

+0

@ javahead76 этот вызов будет работать, только если 'Build.VERSION.SDK_INT> = 11' –

6

Я бы упростить решение Адиля еще дальше следующее:

public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem registrar = menu.findItem(R.id.menuregistrar);  
    registrar.setVisible(!isRegistered); 
    return true; 
} 
+1

Его хорошо, но некоторые новые пользователи не получат его, поскольку они спешат и хотят решить проблему как можно скорее, поэтому я потратил это показать, что на самом деле происходит там. :) –

+1

@AdilSoomro, этот код проще (и более удобно, если «они спешат»), чем в вашем ответе, поэтому я бы предложил отредактировать исходный ответ. – Stan

Смежные вопросы