私は ListViewAdapter とその中の OnClickListener に苦労しています。タスクは簡単です:
- リストの各行には青いボタンがあります。
- ボタンをクリックすると、ボタンの色が緑色に変わります。
- リストをどのようにスクロールしても、クリックされたボタンには緑色が残るはずです。
アダプターコード:
public class ListViewAdapter extends ArrayAdapter<StuffPics> {
Context context;
public ArrayList<Integer> mItemsChecked;
public ListViewAdapter(Context context, int resource, ArrayList<StuffPics> mylist) {
super(context, resource, mylist);
this.context = context;
mItemsChecked = new ArrayList<Integer>();
}
@Override
public View getView(final int position, View cell, ViewGroup parent) {
final Holder holder;
View v= cell;
if (v == null){
holder = new Holder();
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.seepic_test, null);
holder.mainButton1 = (Button)v.findViewById(R.id.main_button1);
holder.mainButton2 = (Button)v.findViewById(R.id.main_button2);
if(mItemsChecked.size()==0 || (!mItemsChecked.contains(position) && position > mItemsChecked.get(mItemsChecked.size() - 1))){
mItemsChecked.add(position);
}
v.setTag(holder);
}else{
if(mItemsChecked.size()==0 || (!mItemsChecked.contains(position) && position > mItemsChecked.get(mItemsChecked.size() - 1))){
mItemsChecked.add(position);
}
holder = (Holder)v.getTag();
if(!mItemsChecked.contains(position)){
System.out.println("POSITION GREEN : " + Integer.toString(position));
holder.mainButton1.setVisibility(View.INVISIBLE);
holder.mainButton2.setVisibility(View.VISIBLE);
}
}
holder.mainButton1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mItemsChecked.remove(position);
holder.mainButton1.setVisibility(View.INVISIBLE);
holder.mainButton2.setVisibility(View.VISIBLE);
}
});
return v;
}
私の考えは、mItemsChecked 配列のすべての位置を収集し、ボタンをクリックしてこの配列から特定の位置を削除し、ビューの再利用時に mItemsChecked 配列の現在のステータスに従ってそれを分配することです-位置がまだそこにある場合は、青いボタン、位置が配列にない場合 (ボタンがクリックされ、位置が削除された場合)、緑色のボタン。
今、ログによると、それは動作します。しかし、実際のビューによるとではありません)
ログ:
- mItemsChecked 配列は適切に収集されます。
- 特定の位置をクリックすると適切に削除されます。
- System.out.println("POSITION GREEN") は、緑色のボタンがスクロール上にあるはずの正しい位置を示します。
リアルビュー:
- 1 つのボタンをクリックすると、2 つのボタンが緑色に変わります。ボタン num.2 をクリックして下にスクロールすると、ボタン num.12 緑も表示されます。ボタン num.4 の場合は 14 番目、17 番目の場合は 7 番目、というように 10 まで続きます。
- リストを前後にスクロールすると、他のボタンもランダムに緑色に変わります。
ログは実際のビューと一致しないため、ここで固執しました。私は何を間違っていますか?ListView のクリックされたボタンで別の色をオンにして、リストのスクロール中にそれを保持する方法は?