12

मुझे व्यूअर में तीन टुकड़े मिल गए हैं।व्यूपर में फ्रेगमेंट्स के विकल्पमेनू एक-दूसरे के बटन दिखाते हैं

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

    // Set up 1 action button 
    inflater.inflate(R.menu.home_snapshot_add, menu); 
} 

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

    // Set up 2 action buttons 
    inflater.inflate(R.menu.home_snapshot_send, menu); 
} 

घर गतिविधि एक बुनियादी onCreateOptionsMenu विधि है:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    return false; 
} 

onCreate विधि में, प्रत्येक खंड प्रणाली को बुलाती है

इन टुकड़ों के दो onCreateOptionsMenu विधि का अपना संस्करण है :

setHasOptionsMenu(true); 

प्रत्येक मेनू आइटम में टैग होता है :

android:showAsAction="always" 

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

धन्यवाद!

उत्तर

13

अपने ViewPager के OnPageChangeListener में और ViewPager को अनुकूलक सेट करने के बाद, इस राशि:

@Override 
public void onPageSelected(int position){ 
    invalidateFragmentMenus(position); 
} 


private void invalidateFragmentMenus(int position){ 
    for(int i = 0; i < mViewPagerFragentAdapter.getCount(); i++){ 
     mViewPagerAdapter.getItem(i).setHasOptionsMenu(i == position); 
    } 
    invalidateOptionsMenu(); //or respectively its support method. 
} 

अपने टुकड़ा एडाप्टर आह्वान के बाद तर्क के साथ ही विधि स्थापित करने के बाद:

invalidateFragmentMenus(mViewPager.getCurrentItem()); 

उपर्युक्त बयान अन्य सभी टुकड़ों को onCreateOptionsMenu() विधि पर कॉल प्राप्त नहीं करेगा, जब invalidateOptionsMenu() कहा जाता है, केवल वर्तमान में दिखाई देने वाला खंड प्राप्त होगा और पॉपुल करने में सक्षम होगा विकल्प मेनू खा लिया।

+1

आप सुपर तेजी से प्रतिक्रिया के लिए धन्यवाद! वहां कुछ ऐसी चीजें थीं जो मेरे कोड में गलत थीं। 1. मैंने अपने सभी टुकड़ों के लिए सही हैसऑप्शनमेनू को सही किया था। (आपके कोड को ठीक किया गया है) 2. मेरे पास एक घोंसला वाला टुकड़ा था जो आपके कोड द्वारा पकड़ा नहीं जा रहा था 3. गतिविधि के अपने विकल्प मेनू मेनू को प्रारंभ करने के प्रयास के रूप में अपना मेनू बढ़ा रहा था। (इसे हटा दिया गया था) फिर से धन्यवाद! – SalicBlu3

+0

आप 'getChildFragmentManager()' का उपयोग करके बाल टुकड़ों पर पुन: प्रयास कर सकते हैं और उसी तर्क को लागू कर सकते हैं और फिर 'अवैध ऑप्शनमेनू() ' –

+4

पर कॉल कर सकते हैं केवल तभी काम कर रहे हैं जब आपके पेजर एडाप्टर में, आप टुकड़े संदर्भों की एक सूची रखते हैं। यह एक ऐसा पैटर्न है जिसे मैं व्यक्तिगत रूप से पसंद नहीं करता, क्योंकि एंड्रॉइड को मेरे लिए यह करना है, और जब पेजों को स्लाइड करते हैं तो पेजर का पूरा उद्देश्य स्मृति मुक्त करना है ... तो मेरा adapter.getItem फ़ंक्शन केवल रिटर्न नए टुकड़े – Mostrapotski

0

मैं इस का उपयोग किया है और यह मेरे लिए काम किया है:

//In your Fragment 
@Override 
public void onResume() { 
    super.onResume(); 
    setHasOptionsMenu(isVisible()); 

} 
+0

यह काम नहीं किया – krisDrOid

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