Reputation: 1116
Data of my list view is getting repeat on scroll though my clicks are working fine , i know this is the issue regarding to setTag or positioning but i am not able to fix it...so i need little help from you guys
here is my getView function of adapter :-
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
final int i = position;
final WholeProductList listItem = mProductList.get(position);
if (convertView == null) {
convertView = mLayoutInflater.inflate(
R.layout.list_comapare_product, parent, false);
viewHolder = new ViewHolder();
viewHolder.tvProductName = (TextView) convertView
.findViewById(R.id.tv_product_name);
viewHolder.tvProductName.setText(mProductList.get(position)
.getName());
viewHolder.imgProduct = (ImageView) convertView
.findViewById(R.id.img_product);
viewHolder.imgadd = (ImageView) convertView
.findViewById(R.id.img_plus);
viewHolder.mRlConatiner = (RelativeLayout) convertView
.findViewById(R.id.rl_container);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.mRlConatiner.setTag(position);
viewHolder.mRlConatiner.setOnClickListener(new OnClickListener() {
@SuppressWarnings("static-access")
@Override
public void onClick(View v) {
if (tickedItems.contains((Integer) v.getTag())) {
// Already ticked, set to plus
viewHolder.imgadd.setImageDrawable(activity.getResources()
.getDrawable(R.drawable.plus));
tickedItems.remove((Integer) v.getTag());
if (((AppController) activity.getApplicationContext()).cartItemList
.contains(listItem)) {
((AppController) activity.getApplicationContext()).cartItemList
.remove(listItem);
}
} else {
tickedItems.add((Integer) v.getTag());
viewHolder.imgadd.setImageDrawable(activity.getResources()
.getDrawable(R.drawable.tick));
if (!((AppController) activity.getApplicationContext()).cartItemList
.contains(listItem)) {
((AppController) activity.getApplicationContext()).cartItemList
.add(listItem);
}
}
Session.getmCountImage().setvisibilityOn();
}
});
if (tickedItems.contains(position))
viewHolder.imgadd.setImageDrawable(activity.getResources()
.getDrawable(R.drawable.tick));
else
viewHolder.imgadd.setImageDrawable(activity.getResources()
.getDrawable(R.drawable.plus));
return convertView;
}
Thanks
Upvotes: 1
Views: 58
Reputation: 3873
Please try is in this format:
if (convertView == null) {
//please setTag should be encountered in this block of code
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
//and here setText or any value
Upvotes: 0
Reputation: 1170
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
final int i = position;
final WholeProductList listItem = mProductList.get(position);
if (convertView == null) {
convertView = mLayoutInflater.inflate(
R.layout.list_comapare_product, parent, false);
viewHolder = new ViewHolder();
viewHolder.tvProductName = (TextView) convertView
.findViewById(R.id.tv_product_name);
viewHolder.imgProduct = (ImageView) convertView
.findViewById(R.id.img_product);
viewHolder.imgadd = (ImageView) convertView
.findViewById(R.id.img_plus);
viewHolder.mRlConatiner = (RelativeLayout) convertView
.findViewById(R.id.rl_container);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
/////////////This line should be here///////////////////////////////////
viewHolder.tvProductName.setText(mProductList.get(position)
.getName());
/////////////////////////////////////////////////////////////////////////
viewHolder.mRlConatiner.setTag(position);
viewHolder.mRlConatiner.setOnClickListener(new OnClickListener() {
@SuppressWarnings("static-access")
Upvotes: 1
Reputation: 8073
I think you are saving the tag wrong. Set
convertView.setTag(viewHolder);
after your init phase, i.e. the convert view handling, after the condition block.
Upvotes: 0