2011-07-15 10 views
5

Próbuję zaimplementować szybki scroller za pomocą AlphabetIndexer, ale gdy kursor się zmieni, nie odświeży indeksu chache. W moim konstruktora CursorAdapter Wzywam setCursor(cursor) ale nic się nie zmienia, a acording do dokumentacji:AlphabetIndexer setCursor nie aktualizuje pamięci podręcznej

Twój adapter jest odpowiedzialny za aktualizację kursor wywołując setCursor (kursor), jeżeli zmiany kursora. getPositionForSection (int) Metoda przeszukuje binarnie indeks początkowy danej sekcji (alfabet).

Ale nic się nie dzieje. Używam tego dla filtra wyszukiwania, więc podczas wyszukiwania kontaktów aktualizuje listę kontaktów, więc AlphabetIndexer powinien działać, aby zaktualizować indeks nowych pozycji na liście.

Przykład: Moja cała lista rozpoczyna się od kontaktów zaczynających się od "A" i kończących na kontaktach zaczynających się na "E". Tak więc AlphabetIndexer będzie miał indeksy w pamięci podręcznej.

Ale, spróbujmy wyszukać kontakty z "C", i powiedzmy, że mam 250 kontaktów zaczynających się na "C". Muszę więc szybko przewijać te kontakty, a indeks "C" musi się wyświetlać, ale zamiast tylko "C" pokazuje wszystkie indeksy, które były wyświetlane, gdy miałem całą listę.

Oto moja CursorAdapter konstruktor gdzie zadzwonię setCursor (kursor) za każdą literę I typ:

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

Robię coś podobnego TUTAJ http://stackoverflow.com/questions/10224233/alphabetindexer-with-custom-adapter-managed-by-loadermanager – toobsco42

Odpowiedz

3

mam rozwiązać ten nazywając to kolejno po ustawić adaptera:

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

To zadziałało dla mnie.

+1

to nie działa z KITKAT :) –

0

zadzwoń pod numer setContentView(R.layout.whatever), a następnie ponownie wypełnij listę ListView nowymi elementami adaptera/nowych danych. Spowoduje to ponowne narysowanie ListView z nowymi elementami, a nakładka FastScroll pojawi się w odpowiednim miejscu.

Powiązane problemy