gpt4 book ai didi

android - 带章节标题的 ListView

转载 作者:太空狗 更新时间:2023-10-29 14:28:42 26 4
gpt4 key购买 nike

我看过很多关于如何添加按字母顺序排列的节标题以在线列出 View 的示例。示例:

section headers

我实现了来自 this website.但是,我有大约 8000 项的列表。尝试加载此页面时大约需要 8 秒,这显然太慢了。使用普通的 AlphabetIndexer 大约需要 1.5 秒(仍然很慢,但好得多)。

有没有人对如何加快速度有任何想法?如果没有,是否还有其他比这更快的示例?

谢谢!

最佳答案

尝试加载页面到底是什么意思?如果您只加载项目而不进行任何索引,需要多长时间? 8000 项迭代次数并不多。然而,它可能是从磁盘或互联网加载的很多项目。您可能需要考虑显示加载屏幕并在后台读取行数据。

您显示的代码对于您要执行的操作来说看起来特别复杂。下面是我用过的解决方案。你可以用谷歌搜索 SectionIndexer。在我的代码中,itemManager 基本上只是列表的抽象,占位符是空值,其他所有内容都是包含行信息的数据结构。省略部分代码:

//based on http://twistbyte.com/tutorial/android-listview-with-fast-scroll-and-section-index

private class ContactListAdapter extends BaseAdapter implements SectionIndexer {
final HashMap<String, Integer> alphaIndexer = new HashMap<String, Integer>();
final HashMap<Integer, String> positionIndexer = new HashMap<Integer, String>();
String[] sections;

public ContactListAdapter() {
setupHeaders();
}

public void setupHeaders(){
itemManager.clearPlaceholders();
for (int i = 0; i < itemManager.size(); i++) {
String name = itemManager.get(i).displayName();
String firstLetter = name.substring(0, 1);
if (!alphaIndexer.containsKey(firstLetter)) {
itemManager.putPlaceholder(i);
alphaIndexer.put(firstLetter, i);
positionIndexer.put(i, firstLetter);
++i;
}

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

@Override
public int getItemViewType(int position) {
return itemManager.isPlaceholder(position) ? ViewType.HEADER.ordinal() : ViewType.CONTACT.ordinal();
}

@Override
public int getViewTypeCount() {
return ViewType.values().length;
}

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

@Override
public int getSectionForPosition(int position) {
return 1;
}

@Override
public Object[] getSections() {
return sections;
}

关于android - 带章节标题的 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com