2012-09-14 45 views
9

有沒有辦法在ActionBar中動態禁用,隱藏,添加/刪除菜單項?例如,在用戶填寫活動中的有效電話號碼之前,操作將被禁用。ActionBar中動作/菜單項的動態控制

我沒有在ActionBar API中找到任何有用的方法,唯一的方法似乎是在ActionBar中使用自定義視圖。

回答

20

告訴動作條刷新其菜單項:invalidateOptionsMenu()

然後啓用/禁用菜單項:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem item= menu.findItem(R.id.men_1); 
    //depending on your conditions, either enable/disable 
    item.setEnabled(false); 
    super.onPrepareOptionsMenu(menu); 
    return true; 
} 

並隱藏你的動作條:

getActionBar().hide(); 
+1

'onPrepareOptionsMenu'必須返回'布爾值「,您必須返回true才能顯示菜單;如果您返回false,則不會顯示。 –

+7

如果您使用支持庫和'ActionBarActivity',則需要使用['supportInvalidateOptionsMenu()'](http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html# supportInvalidateOptionsMenu%28%29) –

0

另一個選項:在存儲菜單的活動中有一個字段。 。它通過這種方式可以調用getMenuInflater()膨脹()和menu.clear()從任何地方,你在這個活動

所以想,它看起來是這樣的:

class MyActivity extends ActionBarActivity { 

    Menu actionBar; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     actionBar = menu; 
     return true; 
    } 

    //Possible usage 
    void showActionBar1() { 
     getMenuInflater().inflate(R.menu.menu_1, actionBar); 
     actionBar.findItem(R.id.menu_1_btn_1).setOnMenuItemClickListener(); 
    } 

    void showActionBar2() { 
     getMenuInflater().inflate(R.menu.menu_2, actionBar); 
     ... 
    } 

    void clearActionBar() { 
     if (actionBar != null) actionBar.clear(); 
    }