具有多个可单击项的ListView适配器

时间:2015-11-06 01:46:01

标签: android listview onclick adapter

我是android新手。我有一个listView

Image1 | Name | Image2 | Layout1 | Image3

当我点击Image2时,Image2的图像应该更改,Image1的背景应该更改。

我面临的问题是listview中是否有3个可见项目,点击第1项' s图像2即使在4t项目的图像中也会发生变化。如何解决这个问题以及应该采用什么方法?

我在下面发布我的代码。

public class RecipeListAdapter extends BaseAdapter{

Context mContext;
ArrayList<CategoryDetails> categoryDetails;
View.OnClickListener clickListener;

public RecipeListAdapter(Context mContext, ArrayList<CategoryDetails> categoryDetails) {
    this.mContext = mContext;
    this.categoryDetails = categoryDetails;
}

@Override
public int getCount() {
    return categoryDetails.size();
}

@Override
public Object getItem(int i) {
    return categoryDetails.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(final int i, View convertView, ViewGroup viewGroup) {

    ViewHolder holder = null;

    LayoutInflater mInflater = (LayoutInflater) mContext
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.main_recycler_layout, null);
        holder = new ViewHolder();
        holder.recipeImage = (ImageView) convertView.findViewById(R.id.recipe_img);
        holder.chowImage = (ImageView) convertView.findViewById(R.id.chow_image);
        holder.recipeText = (TextView) convertView.findViewById(R.id.recipe_txt);
        holder.likeBasket = (TextView) convertView.findViewById(R.id.like_bsk);
        convertView.setTag(holder);
    } else
        holder = (ViewHolder) convertView.getTag();

    holder.recipeText.setText(categoryDetails.get(i).getRecipeName());

    String imageUrl = Constants.BASE_URL + categoryDetails.get(i).getRecipeImage();
    Picasso.with(mContext)
            .load(imageUrl)
            .placeholder(R.drawable.category_default)
            .into(holder.recipeImage);

    holder.likeBasket.setText(categoryDetails.get(i).getBookmarkCount());
    holder.chowImage.setTag(i);


final ViewHolder finalHolder = holder;
    holder.chowImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            view.setVisibility(View.GONE);
            finalHolder.likeBasket.setBackgroundColor(Color.parseColor("#000000"));
        }
    });

    return convertView;
}


class ViewHolder{
    ImageView recipeImage;
    ImageView chowImage;
    TextView recipeText;
    TextView likeBasket;
}
}

1 个答案:

答案 0 :(得分:0)

没有任何代码,我认为你看到视图1在第4位被回收。因为任何时候只能看到3个项目...

如果这是它正在发生的事情,问题是你没有在适配器中初始化你的视图&#34; convertView&#34;不是空的。

编辑: 我打赌问题出在最终的ViewHolder finalHolder中。 尝试使用&#34; convertView&#34;相反,在这种情况下打破ViewHolder模式,因为你不会遇到这种变化的性能问题。

holder.chowImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        view.setVisibility(View.GONE);
        convertView.findViewById(R.id.like_bsk).setBackgroundColor(Color.parseColor("#000000"));
    }
});