2

リストビューのすべての子要素(表示されている要素だけでなく)を変更する正しい方法は何ですか。デフォルトで表示が消えるように設定されている画像があります。ユーザーがボタンをクリックした後に表示したい(すべてのアイテム)。

ありがとう!

4

3 に答える 3

2

リストビューのすべての子要素(表示されている要素だけでなく)を変更する正しい方法は何ですか。

aについて理解しておくべきことの1つListViewは、すべてのリスト項目が常に生成(膨張/入力)されるわけではないということです。

たとえば、リストAdapterに1000個のアイテムが含まれているが、ListView一度に表示できるのは10個だけであるとします。1000個すべてのリストアイテムを作成することは、リソース(メモリなど)の非常に悪い浪費になります。

代わりに、表示されている10個のアイテムのみが作成され、画面の上部または下部から1つスクロールするたびに、消えたアイテムがメソッドに渡されて再利用されconvertViewますAdapter's getView

getView (int position, View convertView, ViewGroup parent)

求めていることを実行するには、使用するタイプを拡張し、メソッドAdapterをオーバーライドする必要があります。getViewそのメソッドで、そうconvertViewであるnullかどうかを確認します。そうである場合は、リストアイテムレイアウトの独自のインスタンスを膨らませます。nullでない場合は、UI要素(など)を再利用しTextViewますImageView

すべての要素を表示するには、ボタンを押すと切り替えられるImageViewグローバルBooleanなどを使用します。showImageView次に、それを使用してgetView、の可視性を設定するかどうかを決定しImageViewます。

Adapter.getView(...)を参照してください

于 2012-05-11T20:14:54.913 に答える
0

おそらく、フィールド値に応じて、ListAdapterの画像の可視性を設定する必要があります。getView()ボタンをクリックすると、このフィールド値を変更してから呼び出すとListAdapter.notifyDataSetChanged、リストビューが更新getViewされます。フィールド値が変更されたため、呼び出されて画像が変更されます。

于 2012-05-11T19:51:47.570 に答える
0

アダプターの内部でgetView()、ImageViewを取得し、その可視性を「消えた」に設定します。

ImageView iv = (ImageView)convertView.findViewById(R.id.image_view);
iv.setVisibility(buttonClicked ? View.GONE : View.VISIBLE);

次に、ユーザーがボタンをクリックしたら、を設定buttonClicked = trueして呼び出しnotifyDataSetChanged()、ListViewを更新します。

于 2012-05-11T20:26:02.767 に答える