关于ListView嵌套GridView的奇葩问题

这可能是个坑 2018-06-12 07:18:43
如图所示,在ListView嵌套GridView时出现了奇葩现象,求大神指教!
...全文
1491 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
这可能是个坑 2018-06-19
  • 打赏
  • 举报
回复
listview的getiview中区分两种item类型,做两种处理,断点可以看出返回的item类型是正确的 public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub switch (getItemViewType(position)) { case 0: count=position; return handleGoodsView(position,convertView,parent); case 1: count=position; return handleCateView(position,convertView,parent); default: return convertView; } } handleGoodsView的部分代码,convertview的复用部分,这个复用目前我已经注掉了 private View handleGoodsView(final int position, View convertView, ViewGroup parent) { final LifeFloorInfo item = floorInfo.get(position);//某一个楼层 final ArrayList<LifeFloorGoods> detailGoods = floorInfo.get(position).getGoodsList();//type==1时,楼层的商品集合 final ViewHolder holder ; mesureconvertView(listView, DeviceUtil.dip2px(context, getConvertViewOff(95))); // if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.fd_life_floor_item, parent,false); holder = new ViewHolder(); holder.setTag("1"); holder.FloorName = (TextView) convertView.findViewById(R.id.FloorName); // holder.FloorId = (TextView) convertView.findViewById(R.id.FloorId); // holder.Url = (ImageView) convertView.findViewById(R.id.Url); holder.gridview=(GridView)convertView.findViewById(R.id.gridView1); holder.more_tv=(TextView)convertView.findViewById(R.id.mall_home_detail); // holder.view=(RecyclerView)convertView.findViewById(R.id.id_recyclerview_horizontal); convertView.setTag(holder); // } // else { // holder = (ViewHolder) convertView.getTag(); // } holder.FloorName.setText(item.getFloorName()); mesureconvertView(convertView, DeviceUtil.dip2px(context, getConvertViewOff(95)));//动态设置convertview的宽高 horizontal_layout(holder.gridview,DeviceUtil.dip2px(context, 60),detailGoods.size());//设置gridview为横向布局以及gridview的宽度及高度 holder.gridview.setAdapter(new LifeFloorGoodsDetailAdapter(context,detailGoods));//适gridview的内部数据 。。。。。。 设置监听之类的代码就没有粘贴出来了 } handleCateView的代码与handleGoodsView的代码类似 以上如果放开convertview的复用,是在适配出现问题的 后来我尝试了一种写法,把复用放开后就没问题了。 就在list view的getview的一开始就增加一个判断 if (convertView!=null&&position>listView.getLastVisiblePosition()) return convertView; 然后再走swich。。。case的步骤,然后就正常适配数据了,其它的都没有改动,现在还不知道是什么原因,但listview的第一条中的gridview现在已经正常适配了,有没有大神知道是什么原理,我就是随便试试那个判断的,也不知道怎么就好了。
Jing丶無雙 2018-06-15
  • 打赏
  • 举报
回复
你把你复用convertview和去掉convertview复用的代码片段贴出来,对比看看
maogedadada 2018-06-15
  • 打赏
  • 举报
回复
重写gridview ,链接在这 https://blog.csdn.net/yuyan13419694540/article/details/51143223
Jing丶無雙 2018-06-13
  • 打赏
  • 举报
回复
你断点调试,看看ListView加载第一个item的流程是否正常
这可能是个坑 2018-06-13
  • 打赏
  • 举报
回复
一直以为recycleView是5.1才出的正式版呢,所以5.1之前我都在避免使用,非常感谢提醒!另外,我的listview的宽高都是match_parent,我当前的listview在适配的时候,是在listview的getview中根据源数据的类型进行对convertView的动态宽高设置,同时也对convertview里包含的gridview进行了一个宽高的动态设置并适配gridview,listview正常复用convertView的时候,listview的第一条数据无法正常适配,当我去掉listview的convertview的复用的时候,数据适配就正常了,不知道到底是什么原因导致的。。。
jklwan 2018-06-13
  • 打赏
  • 举报
回复
参考这个https://www.jb51.net/article/126601.htm 另外RecyclerView是支持android4.x的
这可能是个坑 2018-06-13
  • 打赏
  • 举报
回复
现在断点只能看到ListView的getView被多次重复调用,我在给GridView设置适配器时,使用了一个handle延迟,确保流畅加载;这个延迟去掉或者不去掉,liatview的getView方法一样被多次调用,例如有5条数据,getView会有多次重复的position=0,1,2,3,4的重复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧