मुझे एसओ पर एक समान प्रश्न के कई उदाहरण मिले हैं लेकिन कोई भी जवाब दुर्भाग्य से मेरी आवश्यकताओं को पूरा नहीं करता है।
मेरे पास चित्र और परिदृश्य के लिए अलग-अलग लेआउट हैं और मैं बैक स्टैक का उपयोग कर रहा हूं, जो दोनों मुझे setRetainState()कॉन्फ़िगरेशन परिवर्तन दिनचर्या का उपयोग करने और ट्रिक्स से बचाता है ।
मैं उपयोगकर्ता को TextViews में कुछ जानकारी दिखाता हूं, जो डिफ़ॉल्ट हैंडलर में सहेजे नहीं जाते हैं। पूरी तरह से गतिविधियों का उपयोग करते हुए मेरे आवेदन को लिखते समय, निम्नलिखित ने अच्छी तरह से काम किया:
TextView vstup;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.whatever);
vstup = (TextView)findViewById(R.id.whatever);
/* (...) */
}
@Override
public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
state.putCharSequence(App.VSTUP, vstup.getText());
}
@Override
public void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
vstup.setText(state.getCharSequence(App.VSTUP));
}
Fragmentएस के साथ , यह केवल बहुत विशिष्ट स्थितियों में काम करता है। विशेष रूप से, जो कुछ टूटता है वह एक टुकड़े को बदल रहा है, इसे पीछे के ढेर में डाल दिया जाता है और फिर स्क्रीन को घुमाते हुए नया टुकड़ा दिखाया जाता है। जो मैंने समझा था, पुराने टुकड़े को onSaveInstanceState()प्रतिस्थापित होने पर कॉल नहीं मिलता है लेकिन किसी तरह से जुड़ा रहता है Activityऔर इस पद्धति को बाद में कहा जाता है जब इसका Viewकोई अस्तित्व नहीं होता है, इसलिए मेरे किसी भी TextViewपरिणाम की तलाश में NullPointerException।
इसके अलावा, मैंने पाया कि मेरे लिए संदर्भ रखना s के TextViewsसाथ अच्छा विचार नहीं है Fragment, भले ही वह Activity's' के साथ ठीक हो । उस स्थिति में, onSaveInstanceState()वास्तव में राज्य को बचाता है, लेकिन टुकड़ा फिर से दिखाई देने पर स्क्रीन को दो बार घुमाए जाने पर समस्या फिर से प्रकट होती है, क्योंकि इसके onCreateView()नए उदाहरण में कॉल नहीं मिलता है।
मैं में राज्य को बचाने के बारे में सोचा onDestroyView()कुछ में Bundleप्रकार वर्ग के सदस्य तत्व (यह वास्तव में और अधिक डेटा, न सिर्फ एक है TextViewऔर बचत) कि में onSaveInstanceState()लेकिन कुछ अन्य कमियां हैं। जाहिर है, अगर टुकड़ा है वर्तमान में दिखाया गया है, दो कार्यों बुला के आदेश को पलट तो मैं दो अलग-अलग परिस्थितियों के लिए खाते में आवश्यकता होगी है। एक क्लीनर और सही समाधान होना चाहिए!