2013-01-23 24 views
23

मेरे पास कुछ टुकड़े दिखाने वाली गतिविधि है। गतिविधि दृश्य में कस्टम FragmentPagerAdapter के साथ प्रारंभिक केवल ViewPager शामिल है। यह एडाप्टर 3 टुकड़ों के बीच नेविगेशन प्रदान करता है।एंड्रॉइड: खंड बदलते समय एक्शन बार को फिर से कैसे बनाएं

सभी एक्शन बार को छोड़कर ठीक काम करने लगते हैं।

मैं किसी भी टुकड़ा के लिए व्यक्तिगत कार्रवाई बार बनाने के लिए मेरे टुकड़े में onCreateOptionsMenu() विधि ओवरराइड:

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

//fragment specific menu creation }

जब मैं कड़ी चोट करते हैं, नया टुकड़ा दिखाई देता है, लेकिन कार्रवाई बार कुछ सेकंड के लिए एक ही रहते हैं। शायद कुछ सेकंड के बाद इस विधि को बुलाया जाता है और एक्शन बार बदल जाता है।

स्वाइप समाप्त होने के बाद कुछ समय में एक्शन बार बदलते समय यह बहुत खराब लगता है। स्वाइप शुरू होने से पहले, मैं तुरंत कार्रवाई बार कैसे बना सकता हूं?

उत्तर

26

आप android पूछना ActionBar फिर से बनाने के लिए इससे पहले कि यह स्वचालित रूप से invalidateOptionsMenu();

फोन करके करता है यह कहीं बिंदु जहाँ आप टुकड़े को बदलने के लिए प्रयास करें और टुकड़ा के बीच और बदलते ActionBar 'अंतराल' को कम करने के लिए करीब क्या कर सकते हैं ।

संपादित

एक पूर्ण समाधान कुछ ऐसा दिखाई देगा:

class activity extends Activity{ 

private void switchFragment(){ 

...do fragment changing stuff 

activity.invalidateOptionsMenu(); 

} 

} 

class someFragment extends Fragment{ 

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


    //fragment specific menu creation 
} 

} 

जो भी टुकड़ा दौरान

activity.invalidateOptionsMenu(); 

तो इसकी

onCreateOptionsMenu 
कॉल करेंगे खुला है

और आप वहां

+0

समस्या है मैं नहीं कर सकता एक्शनबार को फिर से बनाने के लिए एंड्रॉइड से पूछने का कोई स्पष्ट तरीका ढूंढें। –

+0

@Mik मैंने मदद के लिए मेरा जवाब अपडेट कर दिया है, लेकिन मैं वास्तव में आपको पूरी तरह से समझ नहीं पा रहा हूं ... अवैध ऑप्शनमेनू() को "एंड्रॉइड से एक्शनबार फिर से बनाने के लिए पूछना चाहिए" – roarster

+5

धन्यवाद, उत्तर के लिए, लेकिन 1. जब आप कॉल .invalidateOptionsMenu(); सिस्टम वास्तव में एक्शन बार फिर से बना नहीं है। यह केवल आपके टुकड़े में क्रिएटऑप्शनमेनू() पर कॉल करने का कारण बनता है जिससे आप मेनू बदल सकते हैं (जो एक्शनबार का हिस्सा है)। यदि आपने अपने टुकड़े में setHasOptionsMenu (true) कहा है, तो आपको अमान्य ऑप्शनमेनू() को भी कॉल करने की आवश्यकता नहीं है, क्योंकि ऑनक्रेटऑप्शनमेनू() को स्वचालित रूप से कॉल किया जाता है। 2. मुझे स्वाइप करने से पहले क्रिएटऑप्शनमेनू() पर कॉल करने का कोई तरीका नहीं मिला। –

1

में खंड विशिष्ट मेनू निर्माण कर सकते हैं अंततः मुझे इसे प्राप्त करने के लिए कोई ठोस तरीका नहीं मिला।

सबसे अच्छा होगा एक्शनबार को टुकड़ा का एक हिस्सा बनाना, गतिविधि नहीं, लेकिन यह असंभव है।

स्वाइप शुरू होने पर मैं एक्शनबार मेनू और शीर्षक साफ़ करने के साथ समाप्त होता हूं (आप पृष्ठ दृश्य में विशेष श्रोता सेट कर सकते हैं) और पूर्ण स्वाइप करते समय मेनू और शीर्षक फिर से सेट कर सकते हैं और नए खंड दिखाए जाते हैं।

कुछ समय अंतराल देता है और एक्शनबार स्वाइप के दौरान अजीब रूप से खाली दिखता है, लेकिन यह सबसे अच्छा है कि आप कर सकते हैं।
एंड्रॉयड एपीआई सी है ...

+0

यीशु ... खराब समाधान! एंड्रॉइड आर्किटेक्चर बहुत जटिल है !!! – Mateus

4

यह onCreateOptionsMenu लागू करने और प्रत्येक खंड में onAttach कॉलबैक में setHasOptionsMenu (सही) बुला और कार्यों तदनुसार परिवर्तन करके किया जा सकता।

बिना किसी क्रिया टुकड़ा दिखाने के लिए setHasOptionsMenu (गलत) में यह

+0

'एटैच' और 'सेटहासऑप्शनमेनू' का उल्लेख करने के लिए धन्यवाद! – Steven

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

  • कोई संबंधित समस्या नहीं^_^