Android 重写BaseAdapter碰到getView中convertView出现错误

原来的代码如下

public class ArticleListAdapter extends BaseAdapter{
    private LayoutInflater layoutInflater;
    private Context context;
    private List<ArticleListItem> list;
    private ViewHolder holder;

    private ImageLoader imageLoader = ImageLoader.getInstance();
    private DisplayImageOptions options;

    public ArticleListAdapter(Context context) {
        super();
        this.context = context;
        holder = new ViewHolder();
        layoutInflater = LayoutInflater.from(context);
        list = new ArrayList<>();
    }

    public void setList(List<ArticleListItem> list) {
        this.list = list;
    }

    public void addList(List<ArticleListItem> list) {
        this.list.addAll(list);
    }

    public void clearList() {
        list.clear();
    }

    public List<ArticleListItem> getList() {
        return list;
    }

    public void removeItem(int position) {
        if (list.size() > 0) {
            list.remove(position);
        }
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public ArticleListItem getItem(int position) {
        return this.list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (null == convertView) {
            holder = new ViewHolder();
            convertView = layoutInflater.inflate(R.layout.list_item, null);
            holder.image = (ImageView) convertView.findViewById(R.id.image);
            holder.name = (TextView) convertView.findViewById(R.id.article_name);
            holder.tag = (TextView) convertView.findViewById(R.id.article_tag);
            holder.reading = (TextView) convertView.findViewById(R.id.article_view);

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

        ArticleListItem item = list.get(position);

        if (null != item) {
            holder.name.setText(item.getName());
            holder.tag.setText(item.getTag());
            holder.reading.setText(item.getReadingText());
        }

        return convertView;
    }

    private class ViewHolder {
        TextView name;
        ImageView image;
        TextView reading;
        TextView tag;
    }
}

这时发现无论怎么样拉取这个列表,列表显示都只有一个list_item在变化,找了很久找不到原因,后面对照别人的代码看了很久才发现问题所在

这里写图片描述

我在一个adapter中,只实例化了一个viewHolder对象,导致每次更新的都是最后一个viewHolder,也就是页面显示的最后一条的数据,因此出现了更新出现错误的情况,只需要把这行代码移到getView中即可,如下:

这里写图片描述

这样,问题就解决了。

猜你喜欢

转载自blog.csdn.net/cckooo/article/details/56484087