1

ArrayAdapter実装の中SectionIndexerには、同じ最初の文字で始まるリスト項目をチェックするコードがあります。これにより、統合することができます。

このような:

    alphaIndexer = new HashMap<String, Integer>();
    int size = objects.length; 

    for (int i = 0; i < size; i++) {

        // Log.d("ObjectLength", String.valueOf(objects.length));

        ItemObject it = objects[i];
        String name = it.name;
        String s = name.substring(0, 1);
        s = s.toUpperCase();

        if (!alphaIndexer.containsKey(s)) {
            alphaIndexer.put(s, i);
        }
    }

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

    // sectionList.toArray(sections);

    for (int i = 0; i < sectionList.size(); i++)
        sections[i] = sectionList.get(i);

私の質問ですが、この方法で統合するとFastScrollingに影響しますか?を使用するListViewSectionIndexerでは、高速スクロールが常にスムーズであるとは限りませんが、「途切れ途切れ」になることがあります。私は状況から取り除くことができSectionIndexer、高速スクロールは突然スムーズかつ比例してスクロールします。

追加されたコード:

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

public int getSectionForPosition(int position) {
    return 0;
}

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

1 に答える 1

5

SectionIndexerは確かに高速スクロールに影響します。

SectionIndexerを使用する場合、ユーザーがデータセットのこれらのセクションに正確にジャンプできるようにする必要があるということです。これらのセクションのデータが不均一に分散されている場合、高速スクローラーは、データセット内の個々のアイテムの進行状況に比例するのではなく、セクションのセットの進行状況に比例して移動します。

これは意図的なものです。これは、ユーザーが高速スクロールサムをドラッグしているときに、各セクションに同じ重みが与えられるように行われます。1つのセクションに1つのアイテムしかなく、その両側のセクションに数百がある場合でも、任意のセクションを正確にターゲットにすることは、他のセクションをターゲットにするのと同じくらい簡単です。

于 2012-08-26T18:08:49.187 に答える