android - 列表中的数据在滚动时重复

标签 android listview

虽然我的点击工作正常,但我的 ListView 的数据在滚动时重复出现,我知道这是关于 setTag 或定位的问题,但我无法修复它......所以我需要你们的帮助

这是我的适配器的 getView 函数:-

@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;
	}

谢谢

最佳答案

@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")

关于android - 列表中的数据在滚动时重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32499326/

相关文章:

android - 使用 AutoCompleTextView 基于 BaseAdapter 过滤带图像的 Listview

xaml - 使用MVVM将ScrollIntoView转换为SelectedItem(Windows Phone 8.1)

java - 如何在 Eclipse 中仅更改 java 修饰 rune 本颜色?

android - 从特定浏览器启动 android 应用程序

android - 如何在撰写中使用 Intent 启动文件选择器

android - 从自定义适配器更新后 ListView 回到第一个位置

listview - 我可以在 firemonkey 的 ListView 中添加列吗?

wpf - 如何在 WPF ListView 中将 ItemTemplateSelector 与 HeaderTemplate 一起使用?

java - com.android.dex.DexException : Multiple dex files define Lorg/hamcrest/Description;

gradle 2.2 之后的 android studio transformNative_libsWithStripDebugSymbolForDebug