您的位置:首页 > 其它

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

2015-10-27 19:26 656 查看
    首先,项目里面需要用到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
!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息