2016-04-18 5 views
1

例:(可視= false)を アンドロイド:ツールバー内の別のMenuItemを見えるようにするために、1つのMenuItemをクリック

  • メニュー2(可視= false)を
  • MENU3(可視=真)
    • メニュー1

    Menu3をクリックすると、Menu1とMenu2が表示されます。

    @Override 
    public void onPrepareOptionsMenu(Menu menu) { 
        MenuItem Menu1 = menu.findItem(R.id.Menu1); 
        MenuItem Menu2 = menu.findItem(R.id.Menu2); 
    
        Menu1.setVisible(false); 
        Menu2.setVisible(false); 
    } 
    
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        int id = item.getItemId(); 
        if (id == R.id.Menu3) { 
         item.setVisible(false); 
         Menu menu; 
         menu.findItem(R.id.Menu1).setVisible(true); 
    
         return true; 
        } 
    
        return super.onOptionsItemSelected(item); 
    } 
    

    次のコードが機能していません。

    Menu menu; 
    menu.findItem(R.id.Menu1).setVisible(true); 
    
    +0

    'onOptionsItemSelected'は呼び出されますか? – totoro

    答えて

    1

    このコード:menu varaibleが初期化されていないよう

    Menu menu; 
    menu.findItem(R.id.Menu1).setVisible(true); 
    

    は動作しません。必要に応じてmenu変数を初期化してから、setVisibleメソッドを呼び出す必要があります。

    +0

    ガー、そうです。 – totoro

    0

    booleanの変数を使用して、メニュー項目の希望の状態を設定できます。その後、ユーザーがMenu3アイテムをクリックすると、booleanの値が変更され、invalidateOptionsMenu();が呼び出されます。これにより、メニューが再現され、他のメニュー項目が必要に応じて表示されます。

    public class MainActivity extends AppCompatActivity 
    { 
        private boolean showMenu1, showMenu2; 
    
        @Override 
        public void onCreate(Bundle savedInstanceState) 
        { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
    
         // set the initial state here: 
         showMenu1 = false; 
         showMenu2 = false; 
         ... 
        } 
    
        @Override 
        public boolean onCreateOptionsMenu(Menu menu) 
        { 
         getMenuInflater().inflate(R.menu.menu_main, menu); 
    
         menu.findItem(R.id.Menu1).setVisible(showMenu1); 
         menu.findItem(R.id.Menu2).setVisible(showMenu2); 
         return true; 
        } 
    
        @Override 
        public boolean onOptionsItemSelected(MenuItem item) 
        { 
         int id = item.getItemId(); 
         if (id == R.id.Menu3) 
         { 
          showMenu1 = true; 
          showMenu2 = true; 
          invalidateOptionsMenu(); 
          return true; 
         } 
         ... 
        } 
    
    } 
    
    関連する問題