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