舔狗的尊严 2016-04-28 14:26 采纳率: 100%
浏览 1636
已采纳

listview复用两个viewholder,两个viewholder的成员变量是完全不一样的

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolderTop holderTop = null;
ViewHolderNotTop holderNotTop = null;
int state = post.getData().get(position).getState();
System.out.println("state: "+state);
if (convertView == null||!flag[0]||!flag[1]) {
switch (state) {
case 0:
holderNotTop = new ViewHolderNotTop();
convertView = inflater.inflate(R.layout.listviewitem_for_post,
null);
holderNotTop.tv_post_title = (TextView) convertView
.findViewById(R.id.tv_post_title);
holderNotTop.tv_postContent = (TextView) convertView
.findViewById(R.id.tv_postContent);
holderNotTop.tv_writePostTime = (TextView) convertView
.findViewById(R.id.tv_writePostTime);
holderNotTop.postCommentNumber = (TextView) convertView
.findViewById(R.id.postCommentNumber);
holderNotTop.girlview_photo = (GridView) convertView
.findViewById(R.id.girlview_photo);
initPost(position, holderNotTop.tv_post_title,
holderNotTop.tv_postContent,
holderNotTop.tv_writePostTime,
holderNotTop.postCommentNumber,
holderNotTop.girlview_photo);
if (!flag[1]) {
convertView.setTag(R.string.notTop,holderNotTop);
flag[1] = true;
}
break;
case 1:
holderTop = new ViewHolderTop();
convertView = inflater.inflate(
R.layout.listview_item_for_topcomment, null);
holderTop.tv_postTitle = (TextView) convertView
.findViewById(R.id.tv_postTitle);
holderTop.tv_postTitle.setText(post.getData().get(position)
.getTitle());
if (!flag[0]) {
convertView.setTag(R.string.istop,holderTop);
flag[0] = true;
}
break;
}
} else {// 不用实例控件
switch (state) {
case 0:
holderNotTop =(ViewHolderNotTop) convertView.getTag(R.string.notTop);
initPost(position, holderNotTop.tv_post_title,
holderNotTop.tv_postContent,
holderNotTop.tv_writePostTime,
holderNotTop.postCommentNumber,
holderNotTop.girlview_photo);

            break;
        case 1:
            holderTop = (ViewHolderTop) convertView.getTag(R.string.istop);
            holderTop.tv_postTitle.setText(post.getData().get(position)
                    .getTitle());
            break;
        }

    }
    return convertView;
}


class ViewHolderTop {
    TextView tv_postTitle;
}

class ViewHolderNotTop {
    TextView tv_post_title;
    TextView tv_postContent;
    TextView tv_writePostTime;
    TextView postCommentNumber;
    GridView girlview_photo;
}


现在我的问题好像是它们两个前面都复用了,但是当listview的item条数超过屏幕就好像像会刷新,就找不到一个标志了()holderTop = (ViewHolderTop) convertView.getTag(R.string.istop);
            holderTop.tv_postTitle.setText(post.getData().get(position)
                    .getTitle());的holderTop是获取出问题的,报空指针了,貌似之前没刷新时没这问题,是可以正常的获取到该viewholder对象的。  在网上查找的获取是convertview.setTag(int,Object)和convertview.getTag(int),因为尝试了setTag(Object)和getTag()貌似不行!!   请大牛们指点下,在这感谢了.....
  • 写回答

3条回答

  • danielinbiti 2016-04-28 15:06
    关注
     如果listview中有多种布局,继承baseadapter,重写getItemViewType
     类似 http://www.tuicool.com/articles/jAFnMb
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器