我正在为 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") 显示正确的位置,其中绿色按钮应处于滚动状态。
实景:
- 单击一个按钮,两个按钮变为绿色。如果我单击按钮 num.2 ,然后向下滚动,我也会看到按钮 num.12 绿色。如果按钮 num.4,则为 14 号……如果为 17 号,则为 7 号,以此类推,直到 10 号;
- 当我向后和向前滚动列表时,其他按钮也随机变成绿色。
我卡在这里,因为日志与真实视图不匹配。我究竟做错了什么 ?如何在 ListView 中单击的按钮上打开不同的颜色并在列表滚动期间按住它?