0

含まれるテキストが必要とするスペースに応じて、2 列または 1 列に表示する動的に作成されたアイテムのリストがあります。明らかに、それらはすべて同じサイズ (画面サイズの半分) である必要があります。

私の知る限り、それを行う Adapter を備えた標準の Android ビューはありません。GridView を使用すると、複数の列を持つことができますが、一部の行を 1 列、他の行を 2 列にすることはできません。TableLayout はビューを拡大することができますが、ここでも行ごとに必要な列数を知る必要があります。さらに、アダプターはありません。

だから私が知りたいのは、a)このようなものをサポートする、私が見逃しているコントロールがあるか、b)この問題の最も簡単な解決策は何ですか?

編集:項目には CheckBox も含まれており、チェック状態を追跡する必要があるため、アダプターを使用して 1 つのビューに 2 つの項目を配置することはできません。

4

2 に答える 2

1

データをアイテムに行にマッピングするという問題があるため、これは標準コンポーネントを使用して解決するのが難しい問題だと思います。

たとえばCursorwithx行を使用してアダプタにデータを供給する場合、 から見た合計項目数Adapterxです。ただし、条件付きで 2 つのアイテムを同じ行にマッピングしているため、にはの行ListViewが表示されます。しかし、最初からどうなるかは簡単にはわかりません。さらに、が に項目 i where 0 <= i < y を要求する場合、 が のどの要素にマップされるかを判断する(簡単な) 方法はありません。yAdaptery <= xyListViewAdapterAdapterCursori

そうは言っても、実行可能な解決策は、要素のレイアウトを自分でサブクラス化AdapterViewするか、実装することです。ListViewから各アイテムを取得するときAdapterに、周囲のアダプター アイテムのサイズに応じて、それを測定してレイアウトします。

多数の要素がない場合に役立つ別の解決策は、2 つAdapterのカスタム を使用することです。1 つは と呼ばれItemAdapter、もう 1 つは と呼ばれRowAdapterます。ItemAdapter(推定)に基づいて実際のアイテムを膨らませますCursor。はRowAdapterを使用しItemAdapterて項目を取得し、それらを行にマージします。はListView順番に を使用しRowAdapterます。問題は、 が生成する列の数を知るために、が に接続される前のRowAdapterすべての項目を測定する必要があることです。ItemAdapterRowAdapterListView

于 2011-12-09T14:25:45.603 に答える
0

私の知る限り、あなたの問題に対する解決策はありません。このようなことはまだ試していませんが、LinearLayout をリスト項目として使用します。次に、レイアウトを収縮させて長さをチェックする独自のデフレーター (CursorAdapter など) を作成します。必要に応じて、新しいビュー (TextView など) を LinearLayout に追加できます。

于 2011-12-09T11:42:27.543 に答える