खराब फ़ॉर्मेटिंग के कारण आपका कोड समझना थोड़ा कठिन है।
वैसे भी, आपूर्ति किया गया उत्तर वास्तव में ठीक नहीं है। कर्सर onLoadFinished . पर लौटा बंद नहीं होने की गारंटी दी जानी चाहिए, इसलिए आप अपना कर्सर गलत तरीके से लोड कर रहे हैं। विशेष रूप से, जब आप कॉल करते हैं
adapter.getFilter().filter(s.toString());
मैं वास्तव में नहीं समझता कि यहाँ क्या हो रहा है, लेकिन मैं समझता हूँ कि आपको कुछ और करना चाहिए। बस क्वेरी फ़िल्टर को अपने Fragment . के भीतर एक फ़ील्ड में संग्रहित करें और getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this); . ध्यान दें कि आप restartLoader चलाते हैं , और नहीं initLoader , क्योंकि आपके पास अलग डेटा है जिसके लिए आप क्वेरी करना चाहते हैं।
आपके onCreateLoader . में , आपको उस फ़िल्टर का उपयोग करना चाहिए जिसे आपने selection . के लिए एक आवृत्ति चर के रूप में संग्रहीत किया है ।
कुछ पृष्ठभूमि
initLoader पिछले रन में लोड किए गए डेटा को लोड करता है, अगर यह पहले चला था। यही कारण है कि आप अपने टुकड़े/गतिविधि की प्रारंभिक विधि में कॉल करते हैं। यह आसान है क्योंकि आपको अभिविन्यास परिवर्तन पर अनुरोध करने की आवश्यकता नहीं होगी।
restartLoader पहले लोड किए गए डेटा को साफ़ करता है ताकि आपको एक नया Loader मिल सके (संभावित) भिन्न डेटा के साथ काम करने के लिए।
यदि आप वास्तव में सुनिश्चित नहीं हैं कि आप अभी भी क्या कर रहे हैं, तो इस आलेख को पढ़ना सुनिश्चित करें, जो नमूना कोड के साथ लोडर पर एक बहुत अच्छा प्रारंभिक आलेख है जो कि आप जो हासिल करना चाहते हैं उसके समान दिखता है। लोडर पहली बार में काफी गूढ़ होते हैं, लेकिन एक बार जब आप इसे समझ लेते हैं तो यह सहज नौकायन होता है।