ViewHolder パターンに従って、配列アダプターによって設定されたリスト ビューがあります。誰かがボタンをクリックすると、各行はかなり複雑になり、その行に表示されるカウントを増やし、その行のテキストの文字列を更新したいと考えています。
これまでのところ、すべてが正しく入力されていますが、あるセルのボタンをクリックすると、作成されている場合は次の行の値も変更されます。
試してみましnotifyDataSetChanged()
たが、これによりリスト全体が再作成されます。これは私の場合には理想的ではありません。
配列アダプター内でメソッドを定義しているため、行と、リスト項目のその行に入力する項目onClick()
を保持する RowHolder クラスがあります。v
MainListItem
class RowHolder{
View v;
MainListItem i;
RowHolder(View v, MainListItem i){
this.v = v;
this.i=i;
}
}
onClick()
h がホルダーであるボタンのスニペットを次に示します。
h.loveButton.setBackgroundColor(Color.parseColor(rowHolder.i.brandLoveColor));
h.loveButton.setImageResource(R.drawable.lovewhite);
((ImageView)rowHolder.v.findViewById(R.id.lovebutton)).setImageResource(R.drawable.lovewhite);
rowHolder.v.findViewById(R.id.lovebutton).setBackgroundColor(Color.parseColor(rowHolder.i.brandLoveColor));
String newLovers = getLoverString(rowHolder.i,rowHolder);
h.lovers.setText(newLovers);
((TextView)rowHolder.v.findViewById(R.id.lovers)).setText(newLovers);
rowHolder.i.loverString = newLovers;
rowHolder.i.loved = true;
int tmp = rowHolder.i.loves
tmp = tmp + 1;
((TextView)rowHolder.v.findViewById(R.id.lovecount)).setText(String.valueOf(tmp));
h.lovecount.setText(String.valueOf(tmp));
rowHolder.i.loves = tmp;
ボタンをクリックすると、リストビューを提供するデータ、ビューを保持するホルダーのデータ、および実際のビューに表示されるデータの値が変更されます。
この実装は、実際のビューの値を変更すると、表示されているすべての行の値が変更されるという事実を除いて、かなりうまく機能します。
誰かがこれを達成するためのより良い方法を見つけるのを手伝ってくれたら、それは素晴らしいことです.