8

インデックス付きセクションを持つ単純な ListView の代わりに、PinnedHeaderListViewをExpandableListViewで使用できるように調整した人はいますか? 私は基本的にExpandableListView、次のグループ ビューによって押し上げられるまで、各グループ アイテム ビューが一番上に固定されたままになるようにしたいと考えています。

コードを調べて、どのようPinnedHeaderListViewに機能するかを理解しようとしましたが、に適応するのは難しいようExpandableListViewです. 主な問題は、異なる種類のアダプターと描画方法の使用にあるようです。Aは、セクションの位置を追跡するPinnedHeaderListViewために を利用します。SectionIndexer各アイテムを描画するとgetView()、そのアイテムが新しいセクションの始まりであるかどうかがチェックされます。アイテムが新しいセクションの始まりである場合、アイテムのビューにセクション ヘッダーが表示されます。list_itemanExpandableListAdapterには agetChildView()と aがありgetGroupView()、項目とセクションを別々のリスト項目として別々に描画します。

PinnedHeaderListViewで同様の動作を得るためにの方法論を使用する何らかの方法があるに違いないとExpandableListView確信していますが、どこから始めればよいかわかりません。

4

2 に答える 2

4

ExpandableList1 APIdemoで動作する固定ヘッダーを取得できました。

私が直面した最も困難な問題は、SectionIndexer を拡張リストでうまく機能させる方法を見つけることでした。私の質問で証明されたように、私はこれをすべて間違っていると考えていました。この問題を解決する最初の試みでは、MyExpandableAdapter 内に SectionIndexer オブジェクトを作成し、連絡先アプリと Peter の例で行った方法と同様に、それをデータにマップしました。フラット リストの位置がデータ セットと静的に一致するため、これは連絡先アプリで機能します。展開可能なリスト ビューでは、グループが展開されたり展開されたりすると、フラット リストの位置が変化します。

したがって、解決策は、セクション インデクサーをデータにマップするのではなく、ExpandableListView のインスタンスにマップすることです。このソリューションでは、例で使用されている SectionIndexer オブジェクトも必要ありません。次のように、SectionIndexer 実装メソッドを ExpandableListView メソッドにラップするだけです。

    @Override
    public int getPositionForSection(int section) {
        return mView.getFlatListPosition(ExpandableListView
                .getPackedPositionForGroup(section));
    }

    @Override
    public int getSectionForPosition(int position) {
        return ExpandableListView.getPackedPositionGroup(mView
                .getExpandableListPosition(position));
    }

もちろん、これをすべて機能させるために必要な変更は他にもありますが、上記の方法が重要です。完全なコードを google code または github に投稿し、すぐにここからリンクします。ピン留めされたヘッダーを持つ ExpandableLists は見栄えがします。

于 2011-06-08T18:26:08.047 に答える