ListView适配器图像加载错误的位置

时间:2014-03-13 08:50:36

标签: android listview adapter

这很奇怪,当我滚动慢或中等一切都没问题,但是我滚动得非常快,有时(1/5)图片被加载到错误的位置。

View mView;
    ViewHolder holder;

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mView = inflater.inflate(R.layout.item_suggested_user, parent, false);
        holder = new ViewHolder();

        holder.circleImage = (CircleImageView) mView.findViewById(R.id.circle_image);
        holder.fullName = (TextView) mView.findViewById(R.id.item_suggested_fullname);
        holder.img1 = (SmartImageView) mView.findViewById(R.id.item_suggested_img1);


        mView.setTag(holder);

    }else{
        mView = convertView;
        holder = (ViewHolder) mView.getTag();
    }


    final SuggestedUsersModel item = (SuggestedUsersModel) getItem(position);
    holder.fullName.setText(mList.get(position).getFullname());

    if (item.getProfilepictureurl() != null) {
        Picasso.with(mContext)
                .load(item.getProfilepictureurl().replaceAll(" ", "%20"))
                .placeholder(R.drawable.ic_contact)
                .error(android.R.drawable.ic_dialog_alert)
                .into(holder.circleImage);
    } else {
        holder.circleImage.setImageResource(R.drawable.ic_contact);
    }

        String type = item.getPosts().get(0).getMediatype();
        //For Image 1
        if (type.equalsIgnoreCase("text")) {
            holder.img1.setImageResource(R.drawable.text_post_background);
        } else if (type.equalsIgnoreCase("image")) {
            if (item.getPosts().get(0).getUri() != null) {

                Picasso.with(mContext)
                        .load(item.getPosts().get(0).getUri().replaceAll(" ", "%20"))
                        .placeholder(R.drawable.ic_contact)
                        .error(android.R.drawable.ic_dialog_alert)
                        .into(holder.img1);
            } else {
                holder.img1.setImageResource(R.drawable.ic_contact);
            }
        } else {
            if (item.getPosts().get(0).getThumbnailuri() != null) {
                Picasso.with(mContext)
                        .load(item.getPosts().get(0).getThumbnailuri().replaceAll(" ", "%20"))
                        .placeholder(R.drawable.ic_contact)
                        .error(android.R.drawable.ic_dialog_alert)
                        .into(holder.img1);
            } else {
                holder.img1.setImageResource(R.drawable.ic_contact);
            }
        }

我正在使用毕加索,但我几乎尝试了一切,结果是一样的。 我已经知道listview如何工作以及所有重用项目,但我无法解释为什么会发生。

请给我一些想法和解决方案。 感谢

更新1:我添加了按钮,我在点击时更改文字,所以这里再次发生相同的事情(当滚动按钮在其他位置混淆时),所以我不是用于加载图片的库。有人可以帮忙。

1 个答案:

答案 0 :(得分:2)

请勿if-else使用convertView条件。

刚刚放,

LayoutInflater inflater = (LayoutInflater)   mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = inflater.inflate(R.layout.item_suggested_user, parent, false);
holder = new ViewHolder();

holder.circleImage = (CircleImageView) mView.findViewById(R.id.circle_image);
holder.fullName = (TextView) mView.findViewById(R.id.item_suggested_fullname);
holder.img1 = (SmartImageView) mView.findViewById(R.id.item_suggested_img1);

让我知道发生了什么......