2010-12-12 18 views
15

के जीवन चक्र के दौरान एक बार कहा जाता हो जाता है मैंने देखा है किonCreateOptionsMenu (मेनू मेनू) केवल एक गतिविधि

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

केवल एक बार कहा जाता हो जाता है। मुझे मेन्यू प्रदर्शित होने पर हर बार कॉल करने की आवश्यकता होती है क्योंकि मैं एप्लिकेशन स्थिति के आधार पर मेनू से आइटम जोड़ता/निकालता हूं।

क्या यह संभव है?

उत्तर

28

हां। ऐसा करने के लिए आपको उपयोग करने की आवश्यकता है:

public boolean onPrepareOptionsMenu (Menu menu) 

यह कोड आपके विकल्प मेनू दिखाए जाने से पहले हर बार निष्पादित किया जाएगा। अधिक जानकारी here

2

क्या आपका मतलब है कि आप मेनू आइटम को गतिशील रूप से अपडेट करना चाहते हैं? onPrepareOptionsMenu ओवरराइड()

9

यदि आप मेनू खोलने के लिए हर बार बदलना चाहते हैं तो खाते में कुछ और करने के लिए एंड्रॉइड एसडीके संस्करण पर निर्भर करता है।

आप घटनाओं गतिविधि जीवन चक्र के दौरान होने के आधार पर विकल्प मेनू को संशोधित करना चाहते हैं, तो आप विधि onPrepareOptionsMenu() में ऐसा कर सकते हैं:

यह वही डेवलपर गाइड का कहना है। यह विधि आपको मेनू ऑब्जेक्ट पास करती है क्योंकि यह वर्तमान में मौजूद है ताकि आप इसे संशोधित कर सकें, जैसे आइटम जोड़ना, निकालना या अक्षम करना। (टुकड़े भी एक onPrepareOptionsMenu() कॉलबैक प्रदान करते हैं।)

एंड्रॉइड 2.3.x और निचले स्तर पर, सिस्टम प्रत्येक बार जब उपयोगकर्ता विकल्प मेनू खोलता है (मेनू बटन दबाता है) पर सिस्टम कॉल करता है (मेनू बटन दबाता है)।

एंड्रॉइड 3.0 और उच्चतम पर, मेनू मेनू को क्रिया बार में प्रस्तुत किए जाने पर विकल्प मेनू हमेशा खुला रहता है। जब कोई ईवेंट होता है और आप मेनू अपडेट करना चाहते हैं, तो आपको अनुरोध करने के लिए अमान्य ऑप्शनमेनू() को कॉल करना होगा कि सिस्टम पर कॉल करें PrepareOptionsMenu()।

+0

+1 invalidateOptionsMenu() के बारे में भाग सहित के लिए ... बस getActivity()। InvalidateOptionsMenu (कहते हैं) आप आप मेनू के बीच स्विच करने का उपयोग कर रहे अपने बूलियन या जो कुछ भी सेट कहीं के बाद। – whyoz

संबंधित मुद्दे