2012-05-11 10 views
2

リストビューのすべての子要素(目に見える要素だけでなく)を修正する正しい方法は何ですか? 私は、既定で、視界がなくなるように設定された画像を持っています。ユーザーがボタンをクリックすると(すべてのアイテムに対して)表示されるようにしたい。Android Listviewすべてのアイテムを変更します

ありがとうございます!

答えて

2

リストビューのすべての子要素(目に見える要素だけでなく)を修正する正しい方法は何ですか。

ListViewについての1つのことは、リスト項目のすべてが(任意の時点で)生成されるわけではありません。

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

代わりに、わずか10の可視項目が作成されると、画面の上部または下部オフ一方をスクロールするたびに、消失したものがAdapter'sgetView方法にconvertViewとして渡されることによって、再循環されます。

getView (int position, View convertView, ViewGroup parent) 

、あなたがgetViewメソッドを使用して上書きしたいものは何でもAdapterタイプ拡張する必要が求めているものをすることができません。その方法でconvertViewnullかどうかをチェックします。そうであれば、リスト項目レイアウトのインスタンスを展開します。 nullでない場合は、UI要素(TextView,ImageViewなど)を再利用してください。

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

は、アダプタのgetView()内部Adapter.getView(...)

+0

大きな説明!今それは働いている。 10X :) –

0

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

0

を参照してください、あなたはImageViewのをつかむと消えへの可視性を設定します。ユーザーがボタンをクリックしたときに

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

はその後、buttonClicked = trueを設定し、にnotifyDataSetChanged()を呼び出しますListViewをリフレッシュします。

関連する問題