两个ListView 嵌套数据出现错位,混淆的,图片闪烁问题

    首先,项目里面需要用到2个ListView View嵌套,做成朋友圈那种 可以发送9张图的那种,但是做出来,出现问题,每次发布新消息的时候,一级ListView ,与2级ListView的内容时错位的,研究了2个小时,才考虑出问题之所在,原来是ListView 的adapter 适配 复用机制。

ViewHolder  mviewHolder  
if (convertView == null) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.friends_circle_item, null);
                mviewHolder = new ViewHolder(convertView);
                linewidth=Friend_circle.screenWidth - dip2px(6 + 6 + 50 + 10);
                availableTextWidth = (Friend_circle.screenWidth - dip2px(6 + 6 + 50 + 10)) * 6;
                convertView.setTag(mviewHolder);
            }else{
                mviewHolder=(ViewHolder)convertView.getTag();
            }
复用机制: 就是将ListView 里面的Item 进行复用。不用每次去加载布局文件 和申明每个控件。 但是复用 会出现 图片混淆问题, 解决办法是 添加TAG 标签区别。

出现BUG的代码


MyGridAdapter   girdAdpter 写成了全局 变量,之后就会出现,item里面的复用 有问题;

修改代码  可知,每天listview 都会有一个adapter,,、得到启发,所以该为局部变量。


—————————————————————————————————————————————————————————————————————————————

(1)相关资料:

目的:想实现一种效果,点击gridview或者listview某个item时,希望这个item的图片变化或者内容变化下。


       在点击事件中可获得点击的item以及它在gridview、listview中的position,可以通过设置这个item的属性来改变gridview、listview中的数据源,但是如果每次点击都调用gridview.setADapter(xxx)方法的话,数据相当于重新加载了一遍,会刷新一遍,这样就很难达到我们定位所选择的那个子item上了!有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新 gridview、listview。

所以,我们可以这样解决这个问题: 在点击事件中获得所点击的item并改变了它的背景等其他属性后调用:
       SimpleAdapter sa = (SimpleAdapter)gridview.getAdapter();
      sa.notifyDataSetChanged();

这样数据刷新而不是整个页面的刷新!

(2)Android开发ListView嵌套GridView,如何更加优化

我在ListView中嵌套GridView,效果实现了,但我在ListView的getView()中是
new GridViewAdapter(``````),也就是说我每一个大的ListView的Item都有去new
一个GridView的适配器,这样对内存不好。可我想通过notifyDataSetChanged()来
改变嵌套的GridView中的数据,一直实现不了。。。求高手解答···

解决:用viewhoder,重用converview,holder中可以保存adapter等信息,不要每次都new !!!!!




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值