原来的代码如下
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中即可,如下:
这样,问题就解决了。