ListView的Intent跳转详情页, 滑动与点击Position错乱导致数据混乱问题解决

来源:互联网 发布:cmd telnet 端口 编辑:程序博客网 时间:2024/05/29 03:25

问题描述

具体问题是这样:今天在项目中遇到了从一个ListView界面,通过点击Item中的控件(我这里做的是图片,后改为布局)跳转到详情页面,并且将部分数据传入到下一个Activity。

来个图

这里写图片描述
这里写图片描述

问题分析

百度了一下,前辈们早已遇到这样的问题,就是没有给出具体的解决办法,大体思路就是:AbListView中获取getView()和滑动操作是异步进行的,其中滑动操作在一个FlingRunnable的支线程中运行,所以这就导致了在ListView在滑动时可能已经滑动到了第十行,但可能第二行的数据这时就被直接使用了,这就是导致数据加载错乱的根本原因。

问题解决

看了前辈们的指导还是无从下手,怎样能让活动的Position和getView的Position同步呢?我选择不管它!问题归根到底就是convertView复用的问题,不仅复用了布局还顺便复用了数据。

第一步:在convertView == null修改如下:

if (convertView == null) {convertView = mInflater.inflate(R.layout.item_produces, null);//填充布局(只复用ChildView的布局就好了!)convertView.setTag(holder);}else {        holder = (ViewHolder) convertView.getTag();        }

整体可以仿效下面这个样子:只复用布局,其他的随用随取。
这里写图片描述
第二步

填充数据即可。

Intent跳转数据在ListView展开详情的用法

1,使用Bundle存储要传递的数据,推荐Bundle因为什么数据它都能传递。

Bundle b = new Bundle();b.putInt("position", (Integer)position);b.putInt("img", (Integer) mData.get(position)                            .get("img"));b.putString("name",(String) mData.get(position).get("info"));

2,开启Activity,将数据通过Intent传递

Intent info = new Intent(getActivity(), xxxActivity.class);info.putExtras(b);startActivity(info);

3,xxxActivity接收数据并且赋值

“`
Bundle b = getIntent().getExtras();//得到传过来的数据
String name = b.getString(“name”);
int ing = b.getInt(“img”);

tv_pro_name.setText(name);//这里赋值


总结

关于ListView的数据加载错乱问题,通常都是有图复用导致的,复用的好处不言而喻,但是有时候我们要对复用进行处理,把敏感的地方,例如数据,就要考虑选择性的复用了。

0 0
原创粉丝点击