2012-09-14 10 views
9

क्या एक्शनबार में मेनू आइटम को गतिशील रूप से अक्षम, छुपाएं, जोड़/निकालने का कोई तरीका है? उदाहरण के लिए, जब तक उपयोगकर्ता किसी गतिविधि में वैध फ़ोन नंबर भरता है तब तक एक क्रिया अक्षम होती है।एक्शनबार में कार्रवाई/मेनू आइटमों का गतिशील नियंत्रण

मुझे एक्शनबार एपीआई में कोई उपयोगी तरीका नहीं मिला, एकमात्र तरीका एक्शनबार में कस्टम व्यू का उपयोग करना प्रतीत होता है।

उत्तर

20

अपने मेनू आइटम को ताज़ा करने के ActionBar कहता हूं: 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' लौटना चाहिए': यह जिस तरह से यह getMenuInflater कॉल करने के लिए संभव है() बढ़() और menu.clear() कहीं से भी आप इस गतिविधि

तो में चाहते हैं, यह कुछ इस तरह दिखता बूलियन' मान, आपको प्रदर्शित होने के लिए मेनू के लिए सच होना चाहिए; यदि आप झूठी वापसी करते हैं तो यह नहीं दिखाया जाएगा। –

+7

यदि आप समर्थन लाइब्रेरी और 'एक्शनबार एक्टिविटी' का उपयोग कर रहे हैं तो आपको ['supportInvalidateOptionsMenu()'] (http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html# का उपयोग करने की आवश्यकता होगी supportInvalidateOptionsMenu% 28% 29) –

0

एक और विकल्प: मेनू संग्रहित गतिविधि में एक फ़ील्ड है। ।

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(); 
    }