मैंने एक डमी गतिविधि लिखी है जो दो टुकड़ों के बीच स्विच करती है। जब आप FragmentA से FragmentB पर जाते हैं, तो FragmentA बैक स्टैक में जुड़ जाता है। हालाँकि, जब मैं FragmentA पर वापस लौटता हूँ (वापस दबाकर), तो एक पूरी तरह से नया FragmentA बन जाता है और वह जिस अवस्था में था वह खो जाता है। मुझे लग रहा है कि मैं इस प्रश्न के समान चीज के बाद हूं , लेकिन मैंने इस मुद्दे को जड़ से समाप्त करने में मदद करने के लिए एक पूर्ण कोड नमूना शामिल किया है:
public class FooActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, new FragmentA());
transaction.commit();
}
public void nextFragment() {
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, new FragmentB());
transaction.addToBackStack(null);
transaction.commit();
}
public static class FragmentA extends Fragment {
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View main = inflater.inflate(R.layout.main, container, false);
main.findViewById(R.id.next_fragment_button).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
((FooActivity) getActivity()).nextFragment();
}
});
return main;
}
@Override public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save some state!
}
}
public static class FragmentB extends Fragment {
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.b, container, false);
}
}
}
कुछ लॉग संदेशों के साथ:
07-05 14:28:59.722 D/OMG ( 1260): FooActivity.onCreate
07-05 14:28:59.742 D/OMG ( 1260): FragmentA.onCreateView
07-05 14:28:59.742 D/OMG ( 1260): FooActivity.onResume
<Tap Button on FragmentA>
07-05 14:29:12.842 D/OMG ( 1260): FooActivity.nextFragment
07-05 14:29:12.852 D/OMG ( 1260): FragmentB.onCreateView
<Tap 'Back'>
07-05 14:29:16.792 D/OMG ( 1260): FragmentA.onCreateView
यह कभी भी FragmentA.onSaveInstanceState को कॉल नहीं कर रहा है और जब आप वापस आते हैं तो यह एक नया FragmentA बनाता है। हालाँकि, अगर मैं FragmentA पर हूँ और मैं स्क्रीन लॉक करता हूँ, तो FragmentA.onSaveInstanceState को कॉल नहीं किया जाता है। इतना अजीब ... क्या मैं पुन: निर्माण की आवश्यकता नहीं करने के लिए पिछले हिस्से में जोड़े गए एक टुकड़े की अपेक्षा में गलत हूं? यहाँ डॉक्स का कहना है:
जबकि, यदि आप किसी खंड को हटाते समय AddToBackStack () कॉल करते हैं, तो उपयोगकर्ता द्वारा नेविगेट किए जाने पर टुकड़ा बंद हो जाता है और फिर से चालू हो जाएगा।
ListView
। एक स्क्रॉल श्रोता को संलग्न करने और एक उदाहरण चर को अपडेट करने के लिए बहुत अधिक घेरा-कूद की तरह लगता है।