使用ViewHolder遇到的问题

在使用ViewHolder的时候遇到一个令人难忘的问题,在此记录,以备后用!!
先说下我当时的那个界面,主体是一个PullToRefreshListView(一个下拉刷新的列表),每个列表项显示一个用户的一些信息,包括:头像,昵称,和’0~N’个技能项,每个技能项用一个TextView显示,最多显示用户的三条技能项,不足三条的技能项只显示其实际的技能,剩下的TextView设置为不可见。

问题来了:刷新一次后,有的用户的技能项变少了,在刷新一次,干脆就没了!!

在洋神的指导下,找到了问题的所在:
代码:final ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.my_liked_list_item, null);
viewHolder = new ViewHolder();
viewHolder.iv_user_img = (CircleImageView) convertView.findViewById(R.id.iv_user_img);
viewHolder.tv_ilike_nick = (TextView) convertView.findViewById(R.id.ilike_nick);
viewHolder.tv_ilike_skills1 = (TextView) convertView.findViewById(R.id.ilike_skills1);
viewHolder.tv_ilike_skills2 = (TextView) convertView.findViewById(R.id.ilike_skills2);
viewHolder.tv_ilike_skills3 = (TextView) convertView.findViewById(R.id.ilike_skills3);
viewHolder.tv_skills_tail = (TextView) convertView.findViewById(R.id.ilike_skills_tail);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}

ViewHolder使用原理很简单就是第一此使用XML中布局控件的时候,要在索引文件R.java中找一次,是一个很浪费时间的操作,ViewHolder在第一次的时候就将这些控件的索引保存起来。
在View类中定义有一个protected Object mTag = null;
public void setTag(final Object tag) {
mTag = tag;
}
public Object getTag() {
return mTag;
}
我的理解是View类通过一个Object对象保存了所有控件的索引,当页面进行刷新的时候,页面使用的仍然是上一次调用的控件对象,因为第一次使用的时候设置了这些控件对象的属性,在第二次使用的时候这些控件的属性仍然保留了下来࿰

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值