मैं एक (है कि मैं एक ViewPager के लिए एडाप्टर के रूप में उपयोग) और कार्रवाई पट्टी से मेनू आइटम FragmentStatePageAdapter साथ समस्या है।FragmentStatePageAdapter डुप्लिकेट ActionBar मेनू आइटम
जब मैं आवेदन शुरू, सब कुछ ठीक है। अगर मैं काम पृष्ठभूमि करने के लिए (उदाहरण के लिए, होम बटन दबाने) के लिए कदम है और मैं कोई काम कर जब तक गतिविधि समाप्त हो गया है शुरू करते हैं, तो जब मैं वापस अपने आवेदन करने के लिए (लांचर के माध्यम से या एक अधिसूचना मैं बनाने) जाना सब कुछ ठीक है देखते हैं सिवाय एक्शन बार में डुप्लीकेट मेनू आइटम।
एक महत्वपूर्ण विस्तार है कि केवल डुप्लिकेट किए गए आइटम उन प्रत्येक खंड मैं ViewPager में उपयोग की onCreateOptionsMenu() में बनाए गए हैं।
अगर मैं FragmentPageAdapter साथ replaceFragmentStatePageAdapter आइटम अब और दोहराया गया है नहीं है, लेकिन टुकड़े ViewPager में नहीं दिखाया जाता (GetItem() एडाप्टर से समारोह कभी नहीं कहा जाता है, तो यह किसी भी टुकड़ा वापस नहीं करता है)।
कोई विचार? मेनू आइटम डुप्लिकेट करने के लिए FragmentStatePageAdapter से बचने का एक तरीका? शायद FragmentPageAdapter का उपयोग करें, लेकिन टुकड़े दिखाने के लिए एक संशोधन के साथ? मेरे टुकड़ों में एक संशोधन?
यहाँ मेरी आवेदन से कुछ कोड के टुकड़े कर रहे हैं ...
कैसे मेनू आइटम के टुकड़े के अंदर बनाई गई हैं:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
/* Create play button */
final MenuItem mPlay = menu.add(R.string.play_all);
mPlay.setIcon(R.drawable.ic_play_all);
mPlay.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
mPlay.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
final List<Song> songs = getSongs();
if (songs.size() == 0) {
/* Show message */
Toast.makeText(mContext, R.string.no_song_list, Toast.LENGTH_LONG).show();
} else {
/* Play song list */
try { PlayManager.getService().playList(songs); } catch (Exception e) {}
}
return false;
}
});
/* Create menu */
super.onCreateOptionsMenu(menu, inflater);
}
कैसे टुकड़े ViewPager एडाप्टर
में instantiated कर रहे हैं@Override
public Fragment getItem(int position) {
final Class<?> cls = mTabs.get(position);
/* No tab */
if (cls == null)
return null;
/* Instantiate fragment */
final Fragment fragment = Fragment.instantiate(mContext, cls.getName(), null);
/* Add to list */
mFragments.put(position, fragment);
/* Return fragment */
return fragment;
}
धन्यवाद!
पीएस: मैंने लॉन्च मोड को "सिंगलटॉप" में बदलने की कोशिश की और मैंने प्रीइटोसली निर्मित खंड में getItem() में वापस लौटने की कोशिश की (लेकिन यह बेकार है क्योंकि IItem() को एप्लिकेशन पर वापस आने पर कभी नहीं कहा जाता है , जैसा कि मैंने पहले कहा था)।
हैलो, मिगुएल! क्या आपको समाधान मिला? – HighFlyer
हाँ। मैंने अभी इस्तेमाल किए गए समाधान के नीचे पोस्ट किया है। यह एक वास्तविक फिक्स नहीं है बल्कि एक कामकाज है। –