2013-09-10 6 views
16

मेरे पास ListView, कर्सर लोडर और कर्सर एडाप्टर के साथ बहुत ही सरल टुकड़ा है। सबकुछ एक ही गतिविधि में है (केवल टुकड़े स्विच कर रहा है)। मेरी समस्या यह है कि ऑनलोड लोडर() कॉल को कुछ स्थितियों में दो बार कहा जाता है, जहां मैंने initLoader() कॉल रखा था। उन स्थितियों हैं:
फ्रैगमेंट में initLoader को कॉल करते समय?

  • विन्यास परिवर्तन (स्क्रीन आदि घूर्णन)
  • एक और FragmentTransaction उपयोग करने के साथ मौजूदा टुकड़ा जगह और फिर वापस लौट (backstack पॉपिंग)। इस मामले में एक सूची आइटम का विस्तार खंड।

जब initLoader() onCreateView(), onActivityCreated में डाल दिया जाता है() (दस्तावेज़ के सुझावों) onLoadFinished() विन्यास परिवर्तन के बाद दो बार कहा जाता है। Rudik Krasniynos द्वारा स्पष्टीकरण क्यों है। लेकिन ऑनलोड लोड() को केवल एक बार बुलाया जाता है जब बैकस्टैक से नए टुकड़े को पॉप किया जाता है।

जब initLoader() को उपरोक्त से रेज़्यूम()/onStart() विधि स्थिति में रखा जाता है तो उलट दिया जाता है। बैकस्टैक पॉपिंग के लिए लोड कॉन्फ़िगर() पर दो कॉल और कॉन्फ़िगरेशन परिवर्तन के लिए एक।

तो सवाल यह है कि लोडर को दोबारा लोड करने के बिना लोडर को कैसे या कैसे दोहराया जाए या दो बार लोडर को दोबारा नहीं डालना है। धन्यवाद! जगह टुकड़ा के लिए

कोड:

CursorAdapter के लिए
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 उपयोग कर रहा हूँ।

उत्तर

1

मैं इसे ऑनक्रेट में कॉल करता हूं और जहां तक ​​मुझे पता है कि यह सबसे अच्छा अभ्यास है ... मैं अभी इसका उपयोग कर रहा हूं और सभी पूरी तरह से काम करते हैं।

@Override 
    protected void onCreate(Bundle savedInstanceState) 

          ....... 

      getSupportLoaderManager().initLoader(LOADER_ID, null, this); 

          ....... 
} 
+0

हमेशा पूरी तरह से सुरक्षित नहीं हो सकता है। Https://issuetracker.google.com/issues/37017632 – Paulo

0

अपने टुकड़ा

getLoaderManager().initLoader(LOADER_ID, new Bundle(), this); 
+0

क्यों निर्दिष्ट कॉन्फ़िगरेशन का उपयोग नहीं करें चेंज - http://stackoverflow.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation – Warlock

3

में onActivityCreated(Bundle savedInstanceState) में यह कॉल onLoadFinished से बचने के लिए एक से अधिक बार onResume में अपने लोडर init कहा जाता है।

+0

जैसा कि मैंने उपरोक्त कॉलिंग का उल्लेख किया है यह रेज़्यूम() में भी डबल कॉलिंग का कारण बनता है। – Warlock

0

लोडर init से पहले savedInstanceState को जांचने के बारे में कैसे।

if (savedInstanceState == null) 
    getLoaderManager().initLoader(LOADER_ID, null, this); 
संबंधित मुद्दे