2011-12-12 9 views
12

मेरे पास एक लेआउट है जिसमें 2 टुकड़े हैं। ये टुकड़े एक ही मेनू का उपयोग करते हैं, क्योंकि मेरे पास एक और लेआउट हैं जिनमें इनमें से केवल एक है (छोटे स्क्रीन डिवाइस में उपयोग किया जाता है)।उसी मेनू के साथ, उसी मेनू पर, डुप्लिकेट किए गए मेन्यूटेम

मेरी समस्या मेन्यू में प्रत्येक टुकड़े के मेनू आइटम दिखाती है, और चूंकि वे एक ही मेनू से हैं, इसलिए वे एक दूसरे के लिए डुप्लिकेट किए जाते हैं। मुझे केवल एक टुकड़े से मेनू प्रदर्शित करने की ज़रूरत है, दोनों नहीं। क्या वैसे भी मैं इसे संग्रहीत कर सकता हूं?

या, शायद बेहतर, 2 अलग मेनू बनाएं। उन लेआउट्स में से एक जिनमें अकेले इन टुकड़ों में से एक है (जिसे छोटे-स्क्रीन डिवाइस में उपयोग किया जाता है), और लेआउट के लिए एक और दोनों टुकड़े होते हैं। मैं ये कैसे करूं ?

संपादित करें: मैं पिछड़ा संगतता के लिए एक्शनबैरशेलॉक लाइब्रेरी का उपयोग करता हूं, और मैं इसे एंड्रॉइड 3.0 एमुलेटर पर परीक्षण करता हूं।

उत्तर

0

क्या आप createOptionMenu की सुपर विधि को कॉल करते हैं?

  • तो यह हो सकता है कि सभी विकल्पमेनम दिखाए जाएं।
+0

हां, सुपर का निर्माणऑपियनमेनू कहा जाता है। –

+0

तो सुपर विधि को कॉल न करें :) – alosdev

+4

अच्छी तरह से समस्या को खराब कर देगा, मुझे लगता है ;-) –

21

मुझे इतना अच्छा समाधान नहीं मिला है। प्रत्येक खंड के क्रिएटऑप्शनमेनू() में, मेनू को घुमाने से पहले किसी भी मौजूदा मेनू आइटम को हटाने के लिए menu.clear() पर कॉल करें।

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.clear(); 
    inflater.inflate(R.menu.main, menu); 
    super.onCreateOptionsMenu(menu, inflater); 

} 

यह भविष्य की समस्याओं को पोस्ट करेगा। मैं प्रत्येक टुकड़े के लिए अलग-अलग मेनू का उपयोग करने का निर्णय ले सकता हूं, जो प्रत्येक मेनू मेनू आइटम साझा करता है। मुझे लगता है कि हम onrereOptionsMenu() पर मेनू में हेरफेर कर सकते हैं, लेकिन वर्तमान में मुझे नहीं पता कि मेनू इन्फ्लूटर के साथ इसे फुलाए जाने से पहले खंड से जुड़े मेनू आइटम को कैसे प्राप्त किया जाए।

+0

क्या आपने कभी इसका समाधान निकाला है? मैं वर्तमान में इस में भी चल रहा हूं। –

+0

यह .... मेरे लिए काम किया .. हुह .... –

+0

फ्रैगमेंटऑक्टिविटी के ऑनपेरऑप्शनमेनमेनू पर nullpointerexception.कृपया सलाह दें – Umesh

2

मुझे देर हो चुकी है लेकिन शायद यह दूसरों की मदद कर सकती है। यह एक डिजाइन गंध की तरह लगता है (यदि यह शब्द मौजूद है)।

यदि दोनों टुकड़ों में एक ही मेनू आइटम हैं, और इससे कोई फर्क नहीं पड़ता कि किस टुकड़े की वस्तुओं का उपयोग किया जाता है (यानी, यदि आप खंड ए के आइटम 1 या खंड बी के आइटम 1 पर क्लिक करते हैं तो यह कोई फर्क नहीं पड़ता है), तो शायद मेनू टुकड़े का हिस्सा नहीं होना चाहिए, बल्कि गतिविधि का होना चाहिए। यह डुप्लिकेशंस को हल करेगा।

+0

समस्या तब होती है जब कॉन्फ़िगरेशन बदल जाता है और एक्शनबार के साथ अधिक विस्तृत बातचीत होने पर समस्या बहुत उपयोगी होती है .. यह सिर्फ एक डिजाइन गंध की समस्या नहीं है। – dcow

+0

हां, एक सामान्य परिदृश्य एक डिलीट एक्शन है जो मास्टर सूची पर लंबे समय तक प्रेस मेनू और किसी आइटम के लिए विवरण स्क्रीन दोनों के लिए दिखाई देना चाहिए। एक्शन बार के मेनू आइटम को केवल विस्तार खंड से पॉप्युलेट किया जाना चाहिए, जबकि लंबे समय तक दबाए जाने वाले मेनू आइटम केवल लंबे समय तक दबाए जाने पर दिखाए जाते हैं। – Monstieur

0

मुझे एक काम मिल गया, यह मेरे लिए काम कर रहा है। onOptionsItemSelected विधि में, पहले मैं अपनी जांच अगर वर्ग के लिए है या नहीं इसके बराबर वर्ग मैं findFragmentById (R.id.content_frame) के साथ fragmentManager से प्राप्त करने के लिए .getClass()

मैं इस

की तरह कुछ मिल गया
@Override 
    public boolean onOptionsItemSelected(MenuItem item) {   
     if(this.class != getFragmentManager().findFragmentById(R.id.content_frame).getClass()) { 
      return false; // must do nothing 
     } 
     // do your menu stuff 
    } 
संबंधित मुद्दे