2011-07-15 6 views
5

मैं AlphabetIndexer के साथ एक तेज़ स्क्रोलर को कार्यान्वित करने का प्रयास कर रहा हूं, लेकिन जब कर्सर बदलता है, तो यह इंडेक्स चेच को रीफ्रेश नहीं करता है। मेरी CursorAdapter निर्माता में मैं setCursor(cursor) लेकिन कुछ भी परिवर्तन कहते हैं, और प्रलेखन के अनुसार:AlphabetIndexer setCursor अपने कैश को अपडेट नहीं करता

आपका एडाप्टर setCursor (कर्सर) यदि कर्सर परिवर्तन को फोन करके कर्सर को अद्यतन करने के लिए जिम्मेदार है। getPositionForSection (int) विधि किसी दिए गए सेक्शन (वर्णमाला) की प्रारंभिक अनुक्रमणिका के लिए बाइनरी खोज करता है।

लेकिन कुछ भी नहीं हो रहा है। मैं इसे एक खोज फ़िल्टर के लिए उपयोग कर रहा हूं, इसलिए जब मैं संपर्कों को खोजता हूं, तो यह संपर्कों के साथ सूची अपडेट करता है, इसलिए वर्णमाला इंडेक्सर को सूची में नए आइटमों के सूचकांक को अपडेट करने के लिए काम करना चाहिए।

उदाहरण: मेरी पूरी सूची उन संपर्कों से शुरू होती है जो 'ए' से शुरू होती हैं और 'ई' से शुरू होने वाले संपर्कों के साथ समाप्त होती हैं। तो वर्णमाला इंडेक्सर के पास इस इंडेक्स को कैश में रखा जाएगा।

लेकिन, 'सी' के साथ संपर्कों को खोजने का प्रयास करें, और कहें कि मेरे पास 250 संपर्क हैं जो 'सी' से शुरू होते हैं। इसलिए, मुझे इन संपर्कों के माध्यम से तेजी से स्क्रॉल करना होगा, और 'सी' इंडेक्स दिखाना होगा, लेकिन केवल 'सी' के बजाय यह सभी इंडेक्स दिखाता है, जो दिखाए गए थे जब मेरी पूरी सूची थी।

public MyCursorAdapter(Context context, Cursor cursor, ArrayList<Integer> ids) 
     { 
      super(context, cursor); 
      try 
      { 
       mAlphaIndexer = new AlphabetIndexer(cursor, cursor.getColumnIndexOrThrow("Name")," ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 
       notifyDataSetChanged(); 
       mAlphaIndexer.setCursor(cursor);   
       this.mSelectedContacts = ids;    
       Log.e("MyCursorAdapter", "construtor: "); 
      } 
      catch(Exception ex) 
      { 
       Log.e("MyCursorAdapter", "Error: " + ex); 
      } 
      finally 
      { 
       mAlphaIndexer.setCursor(cursor); 
      } 
     } 
+0

मैं यहां कुछ समान कर रहा हूं http://stackoverflow.com/questions/10224233/alphabetindexer-with-custom-adapter-managed-by-loadermanager – toobsco42

उत्तर

3

मैं अनुक्रम में इस फोन करके इस हल करने के बाद मैं एडाप्टर सेट:

listView.setFastScrollEnabled(false); 
listView.setFastScrollEnabled(true); 

यहाँ मेरी CursorAdapter निर्माता जहां मैं setCursor (कर्सर) हर पत्र के लिए मैं टाइप फोन है

यह मेरे लिए काम किया।

+1

यह किटकैट के साथ काम नहीं करता है :) –

0

setContentView(R.layout.whatever) पर कॉल करें और फिर अपने नए एडाप्टर/नए डेटा आइटम के साथ ListView को फिर से पॉप्युलेट करें। यह ListView को आपके नए आइटम के साथ दोबारा हटा देगा और फास्टस्क्रॉल ओवरले सही जगह पर दिखाई देगा।

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