1

私のレイアウトでは、次のように垂直 LinearLayout に 2 つの ListViews が次々に配置されています。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:orientation="vertical"
              android:layout_height="fill_parent">
    <ListView android:id="@+id/events_list"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"/>
    <ListView android:id="@+id/list"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"/>
</LinearLayout>

最初の ListView onItemClick イベントの各要素に対して実装したいと考えています。これにより、各行が展開されて追加情報が表示されます。

これを実現するために、最初のアダプターの getView 関数にすべての要素を追加することにしましたが、そのうちのいくつかは「View.GONE」可視性を持ち、クリックすると可視性が可視に変更されます。

問題は、リスト要素の初期の高さが拡張されず、スクロールのみが追加されることです。

私は ExpandableListView を認識していますが、使用したことがなく、この非常に単純なケースに適切なソリューションであるかどうかはわかりません。


最初の ListView に追加する要素のレイアウトの抜粋 (役立つ場合があります):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:orientation="horizontal"
              android:layout_height="wrap_content">
...
</LinealLayout>
4

3 に答える 3

1

あなたが説明していることに基づいて、拡張可能なリストビューを使用する必要があると思います。リストビューの仕組みが原因で、リスト内の個々のアイテムを更新するのは面倒です。ListView最初は画面いっぱいに表示するのに必要な数だけビューを作成し、ユーザーがリストをスクロールするとそれらのビューをリサイクルします。確かに値を変更できます-たとえば、テキストフィールドと画像を更新します-しかし、ビュー自体は毎回再膨張するわけではなく、子要素の内容のみが変更されます。高さが変わらないのはそのためでしょう。アダプターは新しい子ビューを表示していますが、元の膨張したリスト項目の高さ内で表示しています。

これを機能させるには、View.GONE の代わりに View.INVISIBLE を使用すると考えられます。このようにして、すべての要素を表示するために必要な高さのビューを膨張させ、誰かがクリックすると表示/非表示にします。問題は、これが探している展開/縮小状態にならないことです。さらに、物が隠されている醜い白いスペースがたくさんあります。

そうは言っても、これらのビュー要素をすべて削除するのが良い考えかどうかはわかりません。ExpandableListView通常のビューを表示し、クリックすると別のビューを展開できるように設計されています。これは、ビューごとに可能な XML 要素を解析してから、onClick でさまざまなフィールドを表示/非表示にするよりもはるかに効率的です。この方法の使用を検討してください。通常のリスト ビューよりもそれほど難しくなく、目的に適しています。

于 2013-06-27T13:08:37.907 に答える