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

私は2つの場所の組み合わせで答えを見つけました:

  1. このチュートリアルは、SectionIndexter の初期実装に役立ちました: fastscroll とセクション インデックスを備えた Android ListView

  2. この投稿は、配列の順序を変更する HashMap に関する問題を修正し、代わりに LinkedHashMap を使用することを提案しました。Java HashMap keySet() の反復順序は一貫していますか?

于 2012-11-14T00:55:06.723 に答える
0

このライブラリを使用できます。これは、Android の ListView で使用できる最も単純なセクション アダプターです。すでにお持ちのリスト アダプターで動作します。プロジェクト固有の依存関係はありません。Android プロジェクトに最新の jar またはソースを含めるだけです。

于 2012-11-13T20:25:35.673 に答える