0

我正在为 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 中单击的按钮上打开不同的颜色并在列表滚动期间按住它?

4

1 回答 1

2

你的绿色景观正在被回收。在 if 块之后放置一个 else 条件

if(!mItemsChecked.contains(position)){
        System.out.println("POSITION GREEN : " + Integer.toString(position));
        holder.mainButton1.setVisibility(View.INVISIBLE);
        holder.mainButton2.setVisibility(View.VISIBLE);
    }
else{
    System.out.println("POSITION Blue : " + Integer.toString(position));
        holder.mainButton1.setVisibility(View.VISIBLE);
        holder.mainButton2.setVisibility(View.INVISIBLE);
}
于 2015-09-08T18:21:11.487 回答