2016-09-19 35 views
1

我不知道如何申報的MenuItem對象,而不是我要求每一個方法的菜單項,所以我的代碼看起來象:如何聲明MenuItem對象調用它每次

private Menu menu; 
private void updateMenuIconForWifi(){ 
     MenuItem menuB = menu.findItem(R.id.action_bluetooth); 
     MenuItem menuItemW = menu.findItem(R.id.action_wifi); 
     menuB.setVisible(false); 
     menuItemW.setIcon(R.drawable.ic_network_wifi_black_24dp); 
    } 

    private void changeIconToDefaultWifi(){ 
     MenuItem menuB = menu.findItem(R.id.action_bluetooth); 
     MenuItem menuItemW = menu.findItem(R.id.action_wifi); 
     menuB.setVisible(true); 
     menuItemW.setIcon(R.drawable.ic_wifi_white_24dp); 
    } 

    private void updateMenuIconForBluetooth() { 
     MenuItem menuB = menu.findItem(R.id.action_bluetooth); 
     MenuItem menuItemW = menu.findItem(R.id.action_wifi); 
     menuItemW.setVisible(false); 
     menuB.setIcon(R.drawable.ic_bluetooth_connected_black_24dp); 
    } 

    private void changeIconToDefaultForBluetooth() { 
     MenuItem menuB = menu.findItem(R.id.action_bluetooth); 
     MenuItem menuItemW = menu.findItem(R.id.action_wifi); 
     menuB.setIcon(R.drawable.ic_bluetooth_white_24dp); 
     menuItemW.setVisible(true); 
    } 

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater menuInflater = getMenuInflater(); 
     this.menu = menu; 
     menuInflater.inflate(R.menu.menu_settings, menu); 
     for (int j = 0; j < menu.size(); j++) { 
      MenuItem item = menu.getItem(j); 
      item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     } 
     return true; 
    } 

但這看起來這麼難看。

如何聲明MenuItems一次?當我嘗試添加像

private MenuItem menuB, menuItemW; 

,然後一些值調用這個像onCreate

menuB = menu.findItem(R.id.action_bluetooth); 
menuItemW = menu.findItem(R.id.action_wifi); 

我得到一個錯誤

+0

您應該使用'onPrepareOptionsMenu(菜單菜單)'。而不是更改菜單上的項目圖標和操作。 –

+0

相關提示:) – Rodriquez

回答

0

第一次讀到onPrepareOptionsMenu(Menu menu)

每當用戶按下菜單在他們的Android設備上同時處於您的活動之一onPrepareOptionsMenu方法被調用。第一次顯示菜單(即只有一次)時,將調用onCreateOptionsMenu方法。

基本上,onPrepareOptionsMenu方法是您應該進行任何更改,例如啓用/禁用某些菜單項或根據具體情況更改菜單項文本。

所以做到這一點(不要使用onCreateOptionsMenu(Menu menu)

//Dynamically create context Menu 
    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     menu.clear(); //Clear view of previous menu 
     MenuInflater inflater = getMenuInflater(); 
     if(condition_true) 
      inflater.inflate(R.menu.menu_one, menu); 
     else 
      inflater.inflate(R.menu.menu_two, menu); 
     return super.onPrepareOptionsMenu(menu); 
    } 
0

可以onCreateOptionsMenu在一次保存您的菜單項,並隨後訪問它。

private MenuItem menuB, menuItemW; 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_settings, menu); 

    menuB = menu.findItem(R.id.action_bluetooth); 
    menuItemW = menu.findItem(R.id.action_wifi); 


    //the rest of your codes 
    return true; 
} 
相關問題