2009-12-05 10 views
8

मेरे पास एक सूची दृश्य है जो कर्सर एडाप्टर को अपने एडाप्टर के रूप में उपयोग करता है। मैं अपने डेटा requeryअपने कर्सर को अपने डेटा को दोबारा बदलने के लिए एक सूची दृश्य को रीफ्रेश करने के लिए कैसे करें और इसके विचार

  • के लिए सूची दृश्य के लिए
  • अपने दृश्य को ताज़ा एक बार requery किया जाता है चाहते हैं।

मैंने कोशिश की:

CursorAdapter adapter = (CursorAdapter)listView.getAdapter(); 
adapter.notifyDataSetChanged(); 

और मैं करने की कोशिश की:

CursorAdapter adapter = (CursorAdapter)listView.getAdapter(); 
adapter.getCursor().requery(); 

लेकिन कोई भी काम किया। मैंने अपने ContentProvider की क्वेरी विधि में ब्रेक पॉइंट सेट किया है, लेकिन मुझे आवश्यकता नहीं है या मेरी सूची दृश्य को नए डेटा के साथ रीफ्रेश किया जा रहा है।

क्या आप कृपया मुझे बता सकते हैं कि मेरी समस्या का समाधान क्या है?

धन्यवाद।

उत्तर

16

एक डेटाबेस या सामग्री प्रदाता Cursor एक CursorAdapter के माध्यम से ListView से जुड़ी पर requery() कॉलिंग स्वचालित रूप से सूची (ऊपर अपने दूसरे परिदृश्य) ताज़ा करता है। आप someexamples देख सकते हैं। यदि वह आपके लिए काम नहीं कर रहा है, तो आपके ContentProvider या एडाप्टर में कुछ बग हो सकती है।

+0

आपकी मदद के लिए धन्यवाद। – hap497

+0

यह काम करता है लेकिन प्रदर्शन के बारे में कैसे? आवश्यकता का उपयोग करना आसान है लेकिन मुझे नहीं पता कि यह अच्छा है या नहीं। – Emerald214

+9

आवश्यकता अब बहिष्कृत के रूप में चिह्नित है और एसडीके में इसके साथ एक छोटा सा नोट भी है। अब ऐसा करने का सबसे अच्छा तरीका क्या है, अभी भी आवश्यकता का उपयोग करना अच्छा है? – marchinram

5

आप कोशिश कर सकते हैं: adapter.change कर्सर (नया कर्सर)। इसके लिए मुझे

+0

मेरे लिए भी काम किया। यहां साथी प्रोग्रामर के लिए एक नोट। यह चेंज कर्सर() को यूआई थ्रेड में बुलाया जाना चाहिए। जब कॉल पृष्ठभूमि थ्रेड –

11

काम नई एपीआई में (लोडर प्रबंधक का उपयोग कर) आप का उपयोग कर सकते हैं:

getLoaderManager().getLoader(_YOUR_LOADER_ID_).forceLoad(); 
+4

से है तो मुझे क्रैश हो गया है एक विकल्प भी लोडर मैनेजर()। RestartLoader(); – Anderson

+1

@ एंडरसन 'रीस्टार्ट लोडर' के साथ आपको फिर से तर्क और कॉलबैक की आपूर्ति करने की आवश्यकता है, 'getLoader' केवल आईडी पर आधारित है। – TWiStErRob

4

मैं जानता हूँ कि क्या यह उत्तर शायद बहुत देर हो चुकी है, लेकिन दूसरों के लिए FYI है, तो आप एक कर्सर लोडर उपयोग कर रहे हैं (के रूप में आपको शायद इसके बजाय करना चाहिए), बस

getContext()। getContentResolver()। notifyChange (uri, null);

जहां यूरी एक ही यूरी है जो कर्सर लोडर के लिए उपयोग की जाती है।

संबंधित मुद्दे