2012-03-19 16 views
0

私はプログラムのリストを表示するためにlistviewに現在のデザインを持っています。しかし、プログラムがシリーズであれば、プログラムは1つのsigleエンティティにグループ化されなければならず、シリーズをクリックすると、プログラムの下にそのプログラムが置かれます。 現在、私はシリーズID、プログラム名などの詳細を持つarraylistを持っています。同じシリーズIDを持つプログラムは、単一のシリーズとしてグループ化する必要があります。残りは通常のアイテムとして表示する必要があります。このシリーズをクリックすると、クリックされたシリーズのseriesIDを持つすべてのプログラムが、クリックされた項目の下に表示されます。 拡張リストビューを同じものに使用することについての洞察は非常に便利です:)expandable listview design

答えて

0

はい、ExpandableListViewを使用してください。

カスタムのExpandableListAdapterを実装する必要があります。それはかなり簡単です。単一のリスト要素の代わりに、子とグループの両方のメソッド(getChildCount()、getGroupCount()など)と、グループと子の間の関係を示すメソッド(getChild(int groupPosition、 int childPosition))。

データを正しくモデリングすると、実装するのが簡単です。あなたのケースでは、1つまたは複数のProgramオブジェクト(子)を含むSeriesオブジェクト(グループ)が必要です。

いくつかのプログラムがシリーズに含まれていない可能性があります。グループ化された項目とグループ化されていない項目を展開可能なリストの中に混在させる方法があるかどうかはわかりません。 「グループ化されていないプログラム」グループを作成する必要があります。

この場合、独自の「グループリストビュー」を実装することができます。それはあまりにも厳しくはありません。あなたのオブジェクトモデルは、あなたのようなメソッドを持って、

class ListItem 
    class ProgramItem extends ListItem 
    SeriesItem extends ListItem 

がProgramItemである、のようなことが含まれる特定のシリーズに含まれている、またはいない場合は、あなたが言うかである、nullを返すことができ

getSeries() 

です。今すぐ素敵な部分。 ProgramItemとSeriesItemを比較可能にし、それらを含むリストをソートします。正しいシリーズの下でプログラムを注文するロジックは、compareTo()の実装にうまくカプセル化されています。

getView()では、instanceofを実行して、それに応じてグループビューまたは子ビューをレンダリングします。 ProgramItemが含まれている場合は、それを字下げしてください。

+0

はい、グループ化されたプログラムとグループ化されていないプログラムのデータをどのようにモデリングするか –

0

拡張可能なリストビューを使用すると、オーバーライド機能 1.getchildview 2.getGroupview

を使用する必要があり、この中

1.withクラスBaseExpandableListAdapterを作成、表示するようアダプタクラスを作成する必要があり拡張可能なリストビューを使用するには

1.getChildCountとgetGroupcountは

は、次の2つのArrayListのプログラムと1シリーズFi回線に 1つのハッシュマップを作成 プログラムとシリーズを持っている参照してください。親と子の長さを返しますND特定のプログラムは、次にベースの拡張可能なリスト・アダプタ内で

を直列を有するされているか否かgetGroupCountで

1.withは、プログラムの長さの長さを返す getchildernCountの長さ 2.withをArrayListを返す プログラム[位置]。長さ(そのプログラムがシリーズハッシュマップを使用している場合)