Listview嵌套一个Gridview,Gridview负责异步加载网路图片,结果出现图片显示错位

loveliwenyan2012 2014-10-06 03:50:07
我最近在做一个微博的应用,主要是读取主页时间线的数据,然后显示在Android手机的应用上,布局是Listview嵌套一个Gridview,Gridview负责异步加载网路图片,用的universal-image-loader开源框架显示gridview控件中的ImageView,结果由于异步加载,出现了图片显示错位,具体情况就是在滑动过程中之前的出现listitem中的gridview又显示在后面的listitem中的gridview中,这个问题困扰了我一两天了,榨不出解决的办法,希望有人帮我参考参考,给点意见,在此谢谢了
...全文
1563 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_25050169 2016-08-09
  • 打赏
  • 举报
回复
楼主,有源码吗,邮我一份,qq981574189
lockyjay 2015-12-10
  • 打赏
  • 举报
回复
12楼解决了我的问题,谢谢分享
weidong_588518 2015-11-10
  • 打赏
  • 举报
回复
怎么解决的啊,贴一下啊啊 啊
lpk_6 2015-10-20
  • 打赏
  • 举报
回复
设置标签 setTag 然后getTag 这样对Viewholder进行赋值 就不会错位了。
临时工__ 2015-10-19
  • 打赏
  • 举报
回复
楼组记得结贴呀。。。。。
浅笑_JIE 2015-07-30
  • 打赏
  • 举报
回复
你在GridView的 adapter 中 对 放置图片的 ImageView 设置一个Tag 里面的值你随意 保证唯一 再getTag出来比较一下 再进行图片下载
123456sadfffffff 2015-07-29
  • 打赏
  • 举报
回复
你的listview的每个item是不是有不同的布局,listview的item错位一般都是因为listview的item有多种布局,如果是这个问题,那么好解决
majin169 2015-07-29
  • 打赏
  • 举报
回复
今天我遇到了相同的问题: 是这样解决的,记录一下; listview中嵌套Gridview时,有时没有图片数据则Gridview不需要显示,一般就会有一个判断 if(是否有图片 true){ setAdapter(new GridviewXXX); } 如果这样就完事了;那么就会有上面的问题,图片出现错位; 解决方法: gridview.setVisibility(View.GONE); if(是否有图片 true){ gridview.setVisibility(View.VISIBLE); setAdapter(new GridviewXXX); } 这样就行了,为什么会出现这样的情况,其实原因还是这个,需要知道getview什么时候回调 http://www.cnblogs.com/lesliefang/p/3619223.html
我走在大路上 2015-07-23
  • 打赏
  • 举报
回复
解决了吗?求答案
sweethearting99 2015-06-04
  • 打赏
  • 举报
回复
解决了吗?求答案
jiangwei_jjjjjm 2015-05-30
  • 打赏
  • 举报
回复
解决了么。楼主,我也遇到了,困扰我好久了0.0
ckb000 2015-01-23
  • 打赏
  • 举报
回复
楼主解决了么 !!!!!!!
Z-ero 2014-10-08
  • 打赏
  • 举报
回复
虽然楼主把viewHolder做成了全局变量,但是每次getView时都置成空了,所以应该不是这个关系,如果是之前的图片在滑动到下面后又出现了然后再变成新的图片,这个就是convertView的问题,这个convertView的原理就是把原来的View重复使用的,所以会出现之前的图片,然后被新的图片取代
dali_yan 2014-10-08
  • 打赏
  • 举报
回复
把ViewHolder設置成局部變量即可。如你代碼,在getView方法中你每次加載一個Item的時候都會修改同一個ViewHolder,這樣會導致顯示混亂。
BuleRiver 2014-10-08
  • 打赏
  • 举报
回复
是不是在子线程中有notifydatasetchanged()???
友谊路一霸 2014-10-06
  • 打赏
  • 举报
回复
3楼正解,你每次调用getView花每项item的时候都是一直在修改同一个ViewHolder,ViewHolder类里面的那些控件都是指向的同一个引用。建议,在getView放法中创建ViewHolder对象
Kifile 2014-10-06
  • 打赏
  • 举报
回复
holder 不要设置为全局变量,设为局部变量吧
loveliwenyan2012 2014-10-06
  • 打赏
  • 举报
回复
谢谢你的回复,这是我的gridview的adapter的getView方法 @Override public View getView(int position, View convertView, ViewGroup parent) { holder=null; if(convertView==null){ convertView=inflater.inflate(R.layout.gridview_item, null); holder=new Holder(); holder.view=(ImageView) convertView.findViewById(R.id.imageView1); convertView.setTag(holder); }else{ holder=(Holder) convertView.getTag(); } String pic_url=timeLineImage.get("picUrl"+position); holder.view.setTag(pic_url); // ImageLoader.getInstance().displayImage(pic_url, holder.view, options); ImageLoader.getInstance().displayImage(pic_url, holder.view, options,new LoadListener()); //setImage(holder.view,pic_url); return convertView; }
友谊路一霸 2014-10-06
  • 打赏
  • 举报
回复
你在getView()中是不是优化了adapter?而且是类似于这么写的? if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item, null); ((TextView) convertView.findViewById(R.id.text1)).setText(mData[position]); } else return convertView; 没有通过tag方式来设置并获取当前数据。

80,361

社区成员

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

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