2011-10-20 19 views
18

को बनाए रखने की अपेक्षा के अनुसार काम नहीं कर रहा है compat lib v1 (कुछ बग्स के कारण v2 | 3 का उपयोग नहीं कर रहा है) का उपयोग करना; this question की एक भिन्नता।ओरिएंटेशन चेंज पर यूआई सेविंग - ऑनसेवस्टेंसस्टेट फ्रैगमेंट

मेरे पास एक टुकड़ा है जिसका यूआई में विभिन्न नियंत्रण हैं जिनके राज्य में मैं एक अभिविन्यास परिवर्तन को बनाए रखना चाहता हूं।

पेरेंट गतिविधि अभिविन्यास परिवर्तन पर नष्ट हो रही है (कृपया मुझे गतिविधि मनोरंजन से बचने के लिए प्रकट परिवर्तनों के बारे में न बताएं !!!!)।

खंड setRetainInstance(true) पर कॉल करता है।

1) अब मेरी समझ यह है कि अद्वितीय आईडी वाले दृश्यों को अभिविन्यास परिवर्तन कहने पर कुछ राज्य बनाए रखना चाहिए। यह देखते हुए मैं onCreateView|onActivityCreated में एक गैर-नल बंडल की अपेक्षा करता हूं लेकिन यह शून्य है।

2) किसी भी मामले में अगर मैं onSaveInstanceState में राज्य को बचाने (सुनिश्चित मैं सुपर कहते हैं) मैं अभी भी 'में एक अशक्त बंडल प्राप्त onCreateView | onActivityCreated`

3) मैं setRetainInstance(true) फोन नहीं है, तो मैं DO onCreateView|onActivityCreated में एक गैर-शून्य बंडल, भले ही मेरे पास 'ऑनसेवस्टेंसस्टेट' विधि न हो।

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

अग्रिम धन्यवाद। पीटर।

+0

क्या आपने इसे हल करने का प्रबंधन किया था? मैं एक ही मुद्दा है। – blindstuff

+0

@blindstuff नहीं, अभी भी यह काम नहीं किया है कि यह एक बग है या एक विशेषता है जिसे मैं 'setRetainInstance (true)' कह रहा हूं। यह देखते हुए कि मुझे एक गैर-शून्य बंडल मिलता है यदि ऐप कम स्मृति वाली स्थिति पर नष्ट हो जाता है तो शायद एक सुविधा। मैं मूल रूप से 'onDestroyView' में नियंत्रण की स्थिति को सहेजकर और बंडल शून्य होने पर 'ऑनक्रेट व्यू' में नियंत्रण बहाल करने के लिए उनका उपयोग कर रहा हूं। मैं भी इसी तरह से सुनिश्चित करता हूं कि मैं 'ऑनसेवस्टेंसस्टेट' में राज्य को सेव करता हूं। – PJL

+0

धन्यवाद, मैं इस से डरता था, मैं घूर्णन के दौरान एक AsyncTask को बनाए रखने की कोशिश कर रहा हूं, इसलिए मैं जो मार्ग सोच रहा हूं उसके बाद मैं वह मार्ग नहीं ले सकता। मैं इस विषय पर अधिक ध्यान देने की कोशिश करने के लिए एक प्रश्न पोस्ट करने जा रहा हूं। – blindstuff

उत्तर

16

यदि आप setRetainInstance(true) का उपयोग करते हैं तो निश्चित रूप से बंडल शून्य है। टुकड़ा नष्ट नहीं हुआ है, लेकिन केवल वर्तमान गतिविधि से अलग है और नई गतिविधि से जुड़ा हुआ है। केवल जब टुकड़ा नष्ट हो जाता है तो आपको onSaveInstanceState में सहेजे गए मानों के साथ एक बंडल मिलता है। बस अपने कस्टम विचारों को सेट करने के लिए setRetainInstance(true) हटाएं और सहेजे गए मानों को onCreateView() में उपयोग करें।

+2

फिर मुझे आश्चर्य हुआ कि 'रोटेशन इंस्टेंस (सत्य)' कहलाता है और इसके अलावा नियंत्रण की स्थिति खो जाती है, तो मुझे रोटेशन पर 'ऑनसेवस्टेंसस्टेट' पर कॉल मिलता है। यह मेरी समझ थी कि अद्वितीय आईडी वाले दृश्यों को अभिविन्यास परिवर्तन कहने पर कुछ राज्य बनाए रखना चाहिए। – PJL

+5

onCreateView() को कोई फर्क नहीं पड़ता कि आप setRetainInstance का उपयोग करते हैं या नहीं। तो पूरा दृश्य फिर से बनाया जाएगा। आप वास्तव में कौन से नियंत्रण देखते हैं कि वे राज्य खो देते हैं? setRetainInstance (सत्य) केवल बहुत विशिष्ट परिस्थितियों में उपयोग किया जाना चाहिए। आप वास्तव में क्या करना चाहते हैं?setRetain .. आपके नियंत्रण की स्थिति नहीं रखता है लेकिन उस टुकड़े को जीवित रखता है ताकि आप अपने सदस्य चर में विभिन्न जानकारी को बचा सकें। फिर, जब क्रिएटिव्यू को फिर से कॉल किया जाता है, तो आप अपने सदस्य चर से जानकारी के साथ अपने विभिन्न विचारों की स्थिति सेट कर सकते हैं। –

+7

धन्यवाद, मुझे एहसास है कि 'ऑनक्रेट व्यू' को बिना किसी पर कॉल किया जाता है और मैं स्वयं नियंत्रण की स्थिति का प्रबंधन कर रहा हूं। मैं यह भी सराहना करता हूं कि चीजें मूल रूप से अपेक्षित रूप से काम कर रही हैं, हालांकि, मुझे अभी भी आश्चर्य हुआ है कि 'ऑनसेवस्टेंसस्टेट' को एक घूर्णन पर बुलाया जाता है जो मुझे झूठी छाप देता है कि 'ऑन क्रेट व्यू' को फिर गैर-नल बंडल के साथ बुलाया जाएगा। – PJL

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