2012-01-27 3 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

+2

つのヒントを:1.youが登録 '書き込むことによって、それを引き締めることができます。 setVisible(userNotRegistered); '2.ブール変数は通常正の値、つまり' if(!userRegistered) 'です。 'if(!UsersNotRegistered)'を理解することが難しい:ユーザーが登録されていない場合は? –

+1

@ W.K.Sが合意した。コメントをいただきありがとうございます。 –

2

public boolean onPrepareOptionsMenu (Menu menu)を使用すると、メニューボタンを押すたびに呼び出され、そこにあなたのものがあります。異なるアクティビティでoncreateoptionsmenu()を使用して別のメニューを膨らませることができます。これは1度だけ呼び出されます。

乾杯

+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

関連する問題