我一直在寻找在listView中使用SectionIndexer的方法。我想在快速滚动列表时显示“短日期”。几年前我看到一个帖子说有一个人说他有工作,他有一个不同的问题,但遗憾的是他没有为他的方法发布任何代码。
我想我必须对我的自定义ArrayAdapter做一些事情,但我不确定是什么,任何人都有任何想法,我可以在哪里找到这样的东西?
谢谢, -Eric
答案 0 :(得分:3)
好的,这就是我最终要做的就是让它正常工作,以防万一其他人在寻找类似的东西。
private class TransactionAdapter extends ArrayAdapter<Transaction> implements SectionIndexer
{
private ArrayList<Transaction> items;
private Context context;
LinkedHashMap<String, Integer> dateIndexer;
String[] sections;
public TransactionAdapter(Context context, int textViewResourceId, ArrayList<Transaction> items)
{
super(context, textViewResourceId, items);
this.context = context;
this.items = items;
this.dateIndexer = new LinkedHashMap<String, Integer>();
int size = items.size();
String prDate = " ";
for (int x = 0; x < size; x++)
{
Transaction tr = items.get(x);
Calendar date = tr.getDate();
String month = date.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());
String year = String.valueOf(date.get(Calendar.YEAR));
String shortDate = month + " " + year;
if( !shortDate.equals(prDate))
{
this.dateIndexer.put(shortDate, x);
prDate = shortDate;
}
}
Set<String> sectionDates = this.dateIndexer.keySet();
// create a list from the set to sort
ArrayList<String> sectionList = new ArrayList<String>(sectionDates);
this.sections = new String[sectionList.size()];
sectionList.toArray(this.sections);
}
public int getPositionForSection(int section)
{
return dateIndexer.get(this.sections[section]);
}
public int getSectionForPosition(int position)
{
return 0;
}
public Object[] getSections()
{
return this.sections;
}
}
我在两个地方找到了答案:
本教程帮助我初步实现了SectionIndexter:Android ListView with fastscroll and section index
这篇文章解决了我用HashMap改变我的数组顺序的问题,它建议使用LinkedHashMap代替。 is the Java HashMap keySet() iteration order consistent
答案 1 :(得分:0)
您可以使用this库。这是适用于Android的ListView的最简单部分适配器。它适用于您已有的列表适配器。没有项目特定的依赖项。只需将最新的jar或源包含到您的Android项目中即可。