मेरे पास ListView, कर्सर लोडर और कर्सर एडाप्टर के साथ बहुत ही सरल टुकड़ा है। सबकुछ एक ही गतिविधि में है (केवल टुकड़े स्विच कर रहा है)। मेरी समस्या यह है कि ऑनलोड लोडर() कॉल को कुछ स्थितियों में दो बार कहा जाता है, जहां मैंने initLoader() कॉल रखा था। उन स्थितियों हैं:
फ्रैगमेंट में initLoader को कॉल करते समय?
- विन्यास परिवर्तन (स्क्रीन आदि घूर्णन)
- एक और FragmentTransaction उपयोग करने के साथ मौजूदा टुकड़ा जगह और फिर वापस लौट (backstack पॉपिंग)। इस मामले में एक सूची आइटम का विस्तार खंड।
जब initLoader() onCreateView(), onActivityCreated में डाल दिया जाता है() (दस्तावेज़ के सुझावों) onLoadFinished() विन्यास परिवर्तन के बाद दो बार कहा जाता है। Rudik Krasniynos द्वारा स्पष्टीकरण क्यों है। लेकिन ऑनलोड लोड() को केवल एक बार बुलाया जाता है जब बैकस्टैक से नए टुकड़े को पॉप किया जाता है।
जब initLoader() को उपरोक्त से रेज़्यूम()/onStart() विधि स्थिति में रखा जाता है तो उलट दिया जाता है। बैकस्टैक पॉपिंग के लिए लोड कॉन्फ़िगर() पर दो कॉल और कॉन्फ़िगरेशन परिवर्तन के लिए एक।
तो सवाल यह है कि लोडर को दोबारा लोड करने के बिना लोडर को कैसे या कैसे दोहराया जाए या दो बार लोडर को दोबारा नहीं डालना है। धन्यवाद! जगह टुकड़ा के लिए
कोड:
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.root_view, fragment, tag);
ft.addToBackStack(null);
ft.commit();
कोड:
//onCreateView
MyCursorAdapter mAdapter = new MyCursorAdapter(getActivity(), null, 0);
mList.setAdapter(mAdapter);
//in other/same lifecycle callbacks
getLoaderManager().initLoader(ID, null, this);
मैं समर्थन पुस्तकालय v18 उपयोग कर रहा हूँ।
हमेशा पूरी तरह से सुरक्षित नहीं हो सकता है। Https://issuetracker.google.com/issues/37017632 – Paulo