2012-01-27 88 views
35

所以,這就是我想知道的。我如何在Android中以編程方式設置菜單的可見性?這是我有我的菜單:以編程方式設置菜單中的可見性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

把這個方法在你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 2012-01-27 07:54:55

+2

兩個小技巧:1.you可以通過寫'註冊擰緊了。 setVisible(userNotRegistered);'2.布爾變量通常是正的,即'if(!userRegistered)'。 'if(!UsersNotRegistered)'很難理解:如果用戶沒有註冊? – 2013-06-26 12:27:12

+1

@ W.K.S同意。感謝您的評論。 – 2013-06-26 12:35:03

2

使用public boolean onPrepareOptionsMenu (Menu menu)每次按菜單按鈕時都會調用它,並在那裏做你的東西。或者在不同的活動中使用你的oncreateoptionsmenu()來膨脹不同的菜單 - 這個只被調用一次。

乾杯

+1

onPrepareOptionsMenu在任何時候也稱爲invalidateOptionsMenu,所以它可能會被多次調用。 – javahead76 2013-04-12 19:19:29

+0

@ javahead76這個調用只有在'Build.VERSION.SDK_INT> = 11'時纔會起作用 – 2013-04-12 19:45:44

6

我甚至會進一步簡化阿迪爾的解決方案具有如下:

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

它很好,但有些新用戶不會得到它,因爲他們急着想盡快解決問題,所以我花了它顯示了那裏實際發生的事情。 :) – 2012-12-13 06:10:18

+1

@AdilSoomro,這個代碼比你的回答更簡單(如果「他們很急」,更方便),所以我建議編輯原始答案。 – Stan 2013-02-28 10:25:16

相關問題