3

我一直在寻找在我的 listView 中的日期上使用 SectionIndexer 的方法。我想在快速滚动我的列表时显示“短日期”。几年前我看到一个帖子,一个人说他可以正常工作,但他有一个不同的问题,但遗憾的是他没有为他的方法发布任何代码。

我想我将不得不对我的自定义 ArrayAdapter 做一些事情,但我不确定是什么,有人知道我在哪里可以找到这样的东西吗?

谢谢,-埃里克

4

2 回答 2

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;
    }
}

我在两个地方的组合中找到了答案:

  1. 本教程帮助我初步实现了 SectionIndexter: Android ListView with fastscroll and section index

  2. 这篇文章解决了我在 HashMap 更改数组排序时遇到的问题,它建议改用 LinkedHashMap。Java HashMap keySet() 迭代顺序是否一致

于 2012-11-14T00:55:06.723 回答
0

你可以使用这个库。这是可用于 Android 的 ListView 的最简单的部分适配器。它适用于您已经拥有的列表适配器。没有项目特定的依赖项。只需将最新的 jar 或源代码包含到您的 Android 项目中即可。

于 2012-11-13T20:25:35.673 回答