sid
sid

Reputation: 1116

Data in list getting repeat on scroll

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

Answers (3)

Androider
Androider

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

Anitha Manikandan
Anitha Manikandan

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

Thomas R.
Thomas R.

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

Related Questions