उपयोग setRetainInstance(true)
और अपनी समस्या गायब हो जाएगा।
चेतावनी: इसे सही पर सेट करने से फ्रैगमेंट्स जीवन चक्र बदल जाएगा।
जबकि setRetainInstance(true)
इस मुद्दे को हल करता है, ऐसे मामले हो सकते हैं जहां आप इसका उपयोग नहीं करना चाहते हैं। कि ठीक करने के लिए, सेटअप टुकड़ा पर एक बूलियन विशेषता और दृश्यता बहाल:
private boolean mVisible = true;
@Override
public void onCreate(Bundle _savedInstanceState) {
super.onCreate(_savedInstanceState);
if (_savedInstanceState!=null) {
mVisible = _savedInstanceState.getBoolean("mVisible");
}
if (!mVisible) {
getFragmentManager().beginTransaction().hide(this).commit();
}
// Hey! no setRetainInstance(true) used here.
}
@Override
public void onHiddenChanged(boolean _hidden) {
super.onHiddenChanged(_hidden);
mVisible = !_hidden;
}
@Override
public void onSaveInstanceState(Bundle _outState) {
super.onSaveInstanceState(_outState);
if (_outState!=null) {
_outState.putBoolean("mVisible", mVisible);
}
}
एक बार विन्यास बदलाव (जैसे स्क्रीन अभिविन्यास), उदाहरण के नष्ट हो जाएगा, लेकिन बंडल संग्रहीत और इंजेक्ट किया जाएगा करने के लिए नया टुकड़ा उदाहरण।
बस ध्यान दें, छिपे हुए टुकड़े को पहले से ही कंटेनर के रूप में अदृश्य में रखा जाता है। इसलिए कॉन्फ़िगरेशन बदलना संभवतः उन्हें फिर से दिखा सकता है क्योंकि वे पहले से ही वहां हैं। – zgulser