我是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;
}
}
答案 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"));
}
});