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中即可,如下:

這裏寫圖片描述

這樣,問題就解決了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章