有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ImageAdapter onClick出错

我正在尝试在GridView的适配器中的ImageView上设置onClick侦听器。然而,奇怪的事情发生了:onClick函数的内容也会影响GridView中的其他一些视图

我没有在GridView上执行click listener有一个很好的原因,所以我需要通过ImageAdapter解决这个问题
logcat只在我单击一次后被调用,但由于某些原因,其他ImageView会受到此函数的影响

以下是相关代码:

 public View getView(final int position, View convertView, ViewGroup parent) {
       final ViewHolder holder;
       if(convertView == null) {
           holder = new ViewHolder();
           convertView = mInflater.inflate(R.layout.row_multiphoto_item, null);
          holder.tickImageView = (ImageView) convertView.findViewById(R.id.tickImageView);
          holder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
          holder.imageViewLayout = (LinearLayout)convertView.findViewById(R.id.imageViewLayout);
           convertView.setTag(holder);
       }
       else{
            holder = (ViewHolder) convertView.getTag();
       }

       holder.imageView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
    ImageView imageView = (ImageView)v;
    int id = imageView.getId();
    imageView.setVisibility(View.GONE);/*
    if(!thumbnailsselection[id]){
        Log.d(Global.TAG, "CLICK");

        holder.tickImageView.setVisibility(View.VISIBLE);
        holder.imageViewLayout.setBackgroundResource(R.drawable.imageview_selected);
        thumbnailsselection[id] = true;
    }
    else{
        holder.tickImageView.setVisibility(View.GONE);
        holder.imageViewLayout.setBackgroundResource(R.drawable.imageview_unselected);
        thumbnailsselection[id] = false;
    }
    */
}

})

           holder.imageView.setId(position);
           holder.imageViewLayout.setId(position);
           holder.tickImageView.setId(position);
           holder.imageView.setImageBitmap(thumbnails[position]);

   return convertView;
  }

        class ViewHolder {
            ImageView imageView;
            LinearLayout imageViewLayout;
            ImageView tickImageView;
            int id;
        }

共 (1) 个答案

  1. # 1 楼答案

    在baseAdapters中,视图是循环使用的。这意味着,如果将某个视图设置为“不可见”,则在滚动时会添加其他一些“不可见”视图。 要避免这种情况,请确保在getView方法中再次设置yout view的可见性:

    holder.imageView.setVisibility(View.VISIBLE)
    holder.imageView.setOnClickListener(new OnCl...
    

    此外,还必须存储每个可见性状态,以便重新分配为可见或不可见