2015-11-06 77 views
0

我是新到Android。我有一个listView的ListView适配器与多个可点击项目

Image1 | Name | Image2 | Layout1 | Image3 

当我点击Image2Image2的形象应该改变和Image1的背景应该改变。

我面临的问题是,如果在listview中有3个可见项目,单击第一个项目的Image2即使在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

没有任何代码我想你看到在位置4.回收由于只有3项视点1上随时可见......

如果这是它正在发生,问题当“convertView”不为空时,您的适配器没有初始化您的视图。

编辑: 我敢打赌,这个问题是在最后ViewHolder finalHolder。 尝试使用“convertView”,而不是在这种情况下打破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")); 
    } 
});