リストビューのすべての子要素(表示されている要素だけでなく)を変更する正しい方法は何ですか。デフォルトで表示が消えるように設定されている画像があります。ユーザーがボタンをクリックした後に表示したい(すべてのアイテム)。
ありがとう!
リストビューのすべての子要素(表示されている要素だけでなく)を変更する正しい方法は何ですか。
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(...)を参照してください
おそらく、フィールド値に応じて、ListAdapterの画像の可視性を設定する必要があります。getView()ボタンをクリックすると、このフィールド値を変更してから呼び出すとListAdapter.notifyDataSetChanged、リストビューが更新getViewされます。フィールド値が変更されたため、呼び出されて画像が変更されます。
アダプターの内部でgetView()、ImageViewを取得し、その可視性を「消えた」に設定します。
ImageView iv = (ImageView)convertView.findViewById(R.id.image_view);
iv.setVisibility(buttonClicked ? View.GONE : View.VISIBLE);
次に、ユーザーがボタンをクリックしたら、を設定buttonClicked = trueして呼び出しnotifyDataSetChanged()、ListViewを更新します。