我看过很多关于如何在列表视图中添加字母索引标题的例子。例如:
有人有任何加速此过程的想法吗?如果没有,是否有比这更快的其他示例?
谢谢!
有人有任何加速此过程的想法吗?如果没有,是否有比这更快的其他示例?
谢谢!
//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;
}
ListView适配器有一个你可以重写的类叫做getViewType(int position)和getViewTypeCount()。
你需要重写这些函数来让Android知道你的适配器使用了多少种不同类型的视图。
在你的情况下,重写getViewTypeCount()
返回2,因为你将有两种类型的视图。一种是标准视图,另一种是头部视图。
接下来,你需要知道何时显示头部视图。一旦确定了位置,你就可以轻松地在getView(...)
函数中返回你的视图。