मुझे एक गतिविधि मिली है, जिसमें खंड 'सूची' है, जो इसके किसी एक आइटम पर क्लिक करने पर स्वयं को 'सामग्री' खंड में बदल देगा। जब उपयोगकर्ता बैक बटन का उपयोग करता है, तो उसे फिर से 'सूची' खंड में लाया जाता है।
समस्या यह है कि टुकड़ा इसकी डिफ़ॉल्ट स्थिति में है, इससे कोई फर्क नहीं पड़ता कि मैं डेटा को जारी रखने की कोशिश करता हूं।बैकस्टैक लेनदेन के बाद खंड डेटा कैसे बने रहें?
तथ्य:
- दोनों टुकड़े
public static TheFragment newInstance(Bundle args)
,setArguments(args)
औरBundle args = getArguments()
- दोनों टुकड़े एक ही स्तर, जो सीधे माता पिता गतिविधि से एक
FrameLayout
(अंदर है पर हैं के माध्यम से बनाए जाते हैं, नेस्ट टुकड़े नहीं है) - मैं
setRetainInstance
पर कॉल नहीं करना चाहता, क्योंकि मेरी गतिविधि एक मास्टर/विस्तार प्रवाह है, जिसमें बड़ी स्क्रीन पर 2 फलक लेआउट है। 7 "टैबलेट में चित्र में 1 फलक और परिदृश्य में 2 पैन हैं। अगर मैं 'सूची' खंड उदाहरण को बरकरार रखता हूं, तो यह स्क्रीन रोटेशन के साथ चीजों को बकवास करेगा (0 मुझे लगता है) - जब उपयोगकर्ता 'सूची' में किसी आइटम पर क्लिक करते हैं टुकड़ा, 'सामग्री' टुकड़ा एक ही आईडी लेकिन एक अलग टैग
- मैं ओवरराइड था
onSaveInstanceState(Bundle)
साथFragmentTransaction#replace(int, Fragment, String)
के माध्यम से प्रदर्शित किया जाता है, है, लेकिन यह नहीं हमेशा ढांचे द्वारा कहा जाता है, के रूप में per the doc: "कई स्थितियों में, जहां कर रहे हैं एक टुकड़ा ज्यादातर तोड़ा जा सकता है (जैसे कि जब यूआई दिखाए बिना बैक स्टैक पर रखा जाता है), लेकिन इसकी स्थिति तब तक सहेजी नहीं जाएगी जब तक कि इसकी अपनी गतिविधि को वास्तव में अपने राज्य को बचाने की आवश्यकता न हो। " - मैं समर्थन पुस्तकालय
उपयोग कर रहा हूँ ऊपर गोली 5 से, मुझे लगता है कि है कि कम अंत उपकरणों एक टुकड़ा लेन-देन के बाद स्मृति को ठीक करने की जरूरत है कि Fragment#onSaveInstanceState(Bundle)
कह सकते हैं। हालांकि, मेरे परीक्षण उपकरणों (गैलेक्सी नेक्सस और नेक्सस 7) पर, ढांचा उस विधि को कॉल नहीं करता है। तो यह एक वैध विकल्प नहीं है।
तो, मैं कुछ खंड डेटा कैसे बनाए रख सकता हूं? Fragment#onCreate
, Fragment#onActivityCreated
, आदि पर बंडल हमेशा null
है।
इसलिए, मैं बैक स्टैक पुनर्स्थापना के लिए एक नए नए खंड लॉन्च से कोई फर्क नहीं पड़ता।
नोट: संभव related/duplicate question
अभी मेरे पास एकमात्र विकल्प है: 'isFromBackStack = getActivity()। GetSupportFragmentManager()। GetBackStackEntryCount()> 0'। मुझे कुछ क्लीनर चाहिए, यह मुझे एक हैक की तरह लगता है। इसके अलावा, मुझे पिछले खंड उदाहरण से 'बंडल' नहीं मिलता है। –