के साथ निर्भर क्वेरी लोड करने की पसंदीदा विधि Android में LoaderManager API के साथ निर्भर क्वेरी लोड करने की पसंदीदा विधि क्या है? अब सबसे अच्छा के रूप में मैं ऊपर आ सकता है की तर्ज पर कुछ है के साथ:लोडरमेनर
@Override
public void onCreate(Bundle savedInstanceState) {
getLoaderManager().initLoader(FIRST, null, this);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch (loader.getId()) {
case FIRST:
Bundle args = new Bundle();
args.putInt(ID, somethingFromData(data));
getLoaderManager().restartLoader(SECOND, args, this);
break;
case SECOND:
somethingElseFromData(data);
break;
}
}
इस बार के ठीक सबसे काम करता है, लेकिन यह बुरी तरह के तहत एक विशेष मामले दुर्घटनाओं। मान लें कि मैं दूसरी गतिविधि लॉन्च करता हूं या इसके ऊपर एक टुकड़ा दबाता हूं जो FIRST
के डेटा को संशोधित करता है। अब जब मैं उपरोक्त कोड के साथ गतिविधि/खंड पर वापस जाता हूं तो पहले मुझे FIRST
और SECOND
के पुराने डेटा के साथ रीफ्रेश करता है, और FIRST
SECOND
, SECOND
को नए डेटा के साथ पुनः लोड किया गया है। अब FIRST
बदल दिया गया है, इसे फिर से लोड किया गया है, जो शुरू करने के लिए SECOND
का एक और लोड का कारण बनता है।
सबसे पहले अगर आप गिनती है कि दोनों (एक वर्ष और एक नया) जो कम से कम एक सा बेकार तेजी FIRST
का भार और SECOND
के तीन भार (दो वर्ष और एक नया), अप करने के लिए योग। मुझे वास्तव में कोई फर्क नहीं पड़ता कि, इसे छोड़कर इसे डीबग करने में परेशानी होती है, लेकिन ऐसा लगता है कि मुझे गैर-निर्धारक व्यवहार करना भी लगता है, क्योंकि आप नहीं जानते कि कौन से भार पहले खत्म हो जाएंगे। FIRST
और SECOND
के बीच संबंध बदल गया है, या मैं कैश किए गए मानों के साथ समाप्त हो जाएगा, तो क्या मैं SECOND
के लिए नए डेटा के साथ समाप्त हो जाऊंगा?
मुझे पता है कि मैं दूसरे लोडर को पुनरारंभ करने के लिए स्कोर रखने के द्वारा इसे कम कर सकता हूं, लेकिन ऐसा करने का एक बेहतर तरीका होना चाहिए।
थोड़ा स्पष्ट करने के लिए: समस्या सबसे प्रमुख है अगर FIRST
में पंक्तियों एक भरी हुई SECOND
में एक ही पंक्ति (रों) को इंगित नहीं करता FIRST
में SECOND
में और पंक्ति (यों) वापस नेविगेशन के बाद पंक्तियों को संदर्भ है पहले जैसा।
यह नहीं जानना कि आपका डेटा कैसा दिखता है, लेकिन यह डेटाबेस दृश्य की तरह गंध करता है और आपको केवल एक लोडर का उपयोग करने की अनुमति देता है? –
क्या यह सबक्वायरी, जॉइन इत्यादि जैसी चीज नहीं होगी, और क्या यह अन्य प्रश्नों के समान ही अपडेट किया गया है? अर्थात। 'पहले चुनें। आईडी, दूसरा। पहले से पहले दूसरे पर जुड़ें first.id = second.first', जहां पहला या दूसरा संपादित किया गया है, क्या मुझे' लोडर प्रबंधक 'से नया अपडेट मिलेगा? –
विशेष रूप से मैं किस बारे में सोच रहा हूं इसका नमूना: http://sqlfiddle.com/#!5/3dd28/2/0 –