2012-08-26 55 views
1

Inside ArrayAdapter Implementing SectionIndexer有代碼檢查以相同的第一個字母開頭的列表項目 - 因此可以合併。SectionIndexer如何影響Android快速滾動?

像這樣:

alphaIndexer = new HashMap<String, Integer>(); 
    int size = objects.length; 

    for (int i = 0; i < size; i++) { 

     // Log.d("ObjectLength", String.valueOf(objects.length)); 

     ItemObject it = objects[i]; 
     String name = it.name; 
     String s = name.substring(0, 1); 
     s = s.toUpperCase(); 

     if (!alphaIndexer.containsKey(s)) { 
      alphaIndexer.put(s, i); 
     } 
    } 

    Set<String> sectionLetters = alphaIndexer.keySet(); 
    ArrayList<String> sectionList = new ArrayList<String>(sectionLetters); 
    Collections.sort(sectionList); 
    sections = new String[sectionList.size()]; 

    // sectionList.toArray(sections); 

    for (int i = 0; i < sectionList.size(); i++) 
     sections[i] = sectionList.get(i); 

我的問題,並鞏固這種方式的效果FastScrolling?有時在使用SectionIndexer的ListViews上,快速滾動並不總是平滑但「波濤洶涌」。我可以從這種情況中刪除SectionIndexer,快速滾動按比例順利滾動。

添加的代碼:

public int getPositionForSection(int section) { 
    return alphaIndexer.get(sections[section]); 
} 

public int getSectionForPosition(int position) { 
    return 0; 
} 

public Object[] getSections() { 
     return sections; 
    } 
+0

您發佈的代碼在每次調用getSectionForPosition' /'getPositionForSection'時執行? – zapl

+0

@zapl我只是將這些方法添加到頂部,以便您可以看到我在做什麼。 – KickingLettuce

+0

http://stackoverflow.com/questions/11988886/fastscrollbar-go-out-of-screen-when-sectionindexer-實施 – GOLDEE

回答

5

SectionIndexer確實影響快速滾動。

使用SectionIndexer時,您說的是您希望用戶能夠精確跳轉到數據集的這些部分。如果這些部分中的數據分佈不均勻,那麼快速滾動器將根據其在部分集合中的進度成比例地移動,而不是與數據集中每個單獨項目的進度成比例。

這是故意的;它以這種方式完成,以便當用戶拖動快速滾動拇指時,每個部分被賦予相同的權重。精確定位任何部分與定位任何其他部分一樣簡單,即使一個部分只有一個項目,而其任一側的部分都有數百個項目。

+0

感謝您的意見。還有一個問題需要澄清:當我說這是「波濤洶涌」時,我應該明確指出,當您經常滾動時,快速滾動「拇指滾動」符號與屏幕高度不成正比。有時它跳到底部,其他時間,它滾動屏幕。但是,如果您手動抓住滾動條,它就會成比例。在我的應用程序中,我保持快速滾動,並刪除了SectionIndexer,並完美滾動(無論哪種方式)。我說的話有道理嗎? – KickingLettuce

+5

它在屏幕外移動不正常。 :)確保你提供了SectionIndexer接口的所有方法 - 它需要能夠從節索引到適配器位置以及從適配器位置到該項目的節索引這兩種方式進行映射。 **編輯**只是看到你添加的代碼;你的'getSectionForPosition'方法報告每個項目都屬於第一部分。它應該報告位置所屬部分的索引。 – adamp

+0

該方法的正確return語句是什麼?它實際上是「1」,之後我改變爲「0」而沒有改變。 (編輯:文檔說它返回「部分索引,如果位置超出範圍,則部分索引必須被裁剪以落在部分數組的大小範圍內。」 - 你知道這是如何實現的嗎?) – KickingLettuce