listView 数据重复加载 怎么办啊

qq_28514109 2016-06-17 03:36:52
listView 数据重复加载 怎么办啊
...全文
1082 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
version1_0 2017-09-19
  • 打赏
  • 举报
回复
我也遇到这个问题了,我的解决办法是在每次获取数据的时候都新new 一个 adupter,虽然解决了,但是这样肯定是不好的,请问你最后怎么解决的?我这边要求不能吧GridView的高度写死,因为图片或多或少
itzhu2015 2016-08-24
  • 打赏
  • 举报
回复
http://www.cnblogs.com/gisdream/p/3514975.html 或者是item布局wrap_content ,慢点改吧
qq_28514109 2016-06-20
  • 打赏
  • 举报
回复
引用 27 楼 yoywow 的回复:
很明显啊,因为 adapter用 到holder去复用 view,每次都是再用同一个 view的拷贝,看看你的 if条件判断,如果是info数据是以2016开头,你的 view会重新设置 text, 如果不是以2016开头的呢,你没去做任何处理,如果这样,因为复用的原则,后面那些不满足条件的 item,都在显示之前的数据!
引用 27 楼 yoywow 的回复:
很明显啊,因为 adapter用 到holder去复用 view,每次都是再用同一个 view的拷贝,看看你的 if条件判断,如果是info数据是以2016开头,你的 view会重新设置 text, 如果不是以2016开头的呢,你没去做任何处理,如果这样,因为复用的原则,后面那些不满足条件的 item,都在显示之前的数据!
那怎么办啊
gexuehai1991 2016-06-20
  • 打赏
  • 举报
回复
引用 42 楼 u012137924 的回复:
这种问题一般是出在获取数据后判断错误或者是适配器没有置空而产生的结果.
置空适配器吗?
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
引用 35 楼 qq_28514109 的回复:
没有 还是有重复的
解决了?
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
这种问题一般是出在获取数据后判断错误或者是适配器没有置空而产生的结果.
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
引用 35 楼 qq_28514109 的回复:
没有 还是有重复的




用JAVA .
gexuehai1991 2016-06-20
  • 打赏
  • 举报
回复
我试过把list和父布局的高度改成固定值,也没啥用 public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder; // General ListView optimization code. if (view == null) { view = mInflator.inflate(R.layout.activity_le_device_list_adapter, null); viewHolder = new ViewHolder(); viewHolder.deviceAddress = (TextView) view .findViewById(R.id.device_address); //viewHolder.deviceUUID = (TextView) view // .findViewById(R.id.device_beacon_uuid); /* viewHolder.deviceName = (TextView) view .findViewById(R.id.device_name); viewHolder.deviceMajor_Minor = (TextView) view .findViewById(R.id.device_major_minor); viewHolder.devicetxPower_RSSI = (TextView) view .findViewById(R.id.device_txPower_rssi);*/ view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } iBeacon device = mLeDevices.get(i); final String deviceName = device.name; if (deviceName != null && deviceName.length() > 0) {}//viewHolder.deviceName.setText(deviceName); else //viewHolder.deviceName.setText(R.string.unknown_device); if (device.isIbeacon) { //viewHolder.deviceName.append(" [iBeacon]"); } viewHolder.deviceAddress.setText(device.bluetoothAddress); //viewHolder.deviceUUID.setText(device.proximityUuid); //Log.i("Ble", device.proximityUuid); if (device.isIbeacon) { /*viewHolder.deviceMajor_Minor.setText("major:" + device.major + ",minor:" + device.minor); viewHolder.devicetxPower_RSSI.setText("txPower:" + device.txPower + ", rssi:" + device.rssi);*/ } else { //viewHolder.devicetxPower_RSSI.setText("rssi:" + device.rssi); } // view.setBackgroundColor(Color.argb(255-iAlpha,255-iRed, 0xFF-iGreen, // 0xFF-iBlue)); if (i % 2 == 0)// set color { view.setBackgroundColor(Color.argb(25, 255, 0, 0)); } else { view.setBackgroundColor(Color.argb(25, 0, 255, 0)); } return view; } class ViewHolder { TextView deviceName; TextView deviceAddress; TextView deviceUUID; TextView deviceMajor_Minor; TextView devicetxPower_RSSI; } }
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
引用 38 楼 u012137924 的回复:
打印刚进入时获取的 list, 对比 刷新后的list,看看是不是一样.
还是贴下代码吧,主要是 贴下 获取数据的那段 .
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
引用 35 楼 qq_28514109 的回复:
没有 还是有重复的
打印刚进入时获取的 list, 对比 刷新后的list,看看是不是一样.
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
楼主结帖率 高达 25%
qq_28514109 2016-06-20
  • 打赏
  • 举报
回复
引用 34 楼 gexuehai1991 的回复:
[quote=引用 32 楼 u012137924 的回复:] [quote=引用 31 楼 qq_28514109 的回复:] 刷新动作出现后有的
adapter = null; adapter = new XXXAdapter(....); listView.setAdapter(adapter);[/quote]
引用 26 楼 yoywow 的回复:
很明显啊,因为 adapter用 到holder去复用 view,每次都是再用同一个 view的拷贝,看看你的 if条件判断,如果是info数据是以2016开头,你的 view会重新设置 text, 如果不是以2016开头的呢,你没去做任何处理,如果这样,因为复用的原则,后面那些不满足条件的 item,都在显示之前的数据!
我在做一个BLE 蓝牙低功耗的demo也遇到一样的问题,接收到第一个设备没什么问题,但是当接收到第二个设备的时候,第二个设备的信息就会覆盖前面设备的信息,造成所有设备显示都是一样的,同样的代码前几天还没有这个问题的,郁闷[/quote] 那你解决了没有啊
qq_28514109 2016-06-20
  • 打赏
  • 举报
回复
引用 33 楼 u012137924 的回复:
试试吧,应该解决了.
没有 还是有重复的
gexuehai1991 2016-06-20
  • 打赏
  • 举报
回复
引用 32 楼 u012137924 的回复:
[quote=引用 31 楼 qq_28514109 的回复:] 刷新动作出现后有的
adapter = null; adapter = new XXXAdapter(....); listView.setAdapter(adapter);[/quote]
引用 26 楼 yoywow 的回复:
很明显啊,因为 adapter用 到holder去复用 view,每次都是再用同一个 view的拷贝,看看你的 if条件判断,如果是info数据是以2016开头,你的 view会重新设置 text, 如果不是以2016开头的呢,你没去做任何处理,如果这样,因为复用的原则,后面那些不满足条件的 item,都在显示之前的数据!
我在做一个BLE 蓝牙低功耗的demo也遇到一样的问题,接收到第一个设备没什么问题,但是当接收到第二个设备的时候,第二个设备的信息就会覆盖前面设备的信息,造成所有设备显示都是一样的,同样的代码前几天还没有这个问题的,郁闷
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
试试吧,应该解决了.
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
引用 31 楼 qq_28514109 的回复:
刷新动作出现后有的
adapter = null; adapter = new XXXAdapter(....); listView.setAdapter(adapter);
qq_28514109 2016-06-20
  • 打赏
  • 举报
回复
引用 30 楼 u012137924 的回复:
[quote=引用 28 楼 qq_28514109 的回复:] 那怎么办啊
写错,你是一开始就加载有重复的数据还是有刷新动作后才出现重复数据的?[/quote]
引用 30 楼 u012137924 的回复:
[quote=引用 28 楼 qq_28514109 的回复:] 那怎么办啊
写错,你是一开始就加载有重复的数据还是有刷新动作后才出现重复数据的?[/quote]
引用 30 楼 u012137924 的回复:
[quote=引用 28 楼 qq_28514109 的回复:] 那怎么办啊
写错,你是一开始就加载有重复的数据还是有刷新动作后才出现重复数据的?[/quote]
引用 30 楼 u012137924 的回复:
[quote=引用 28 楼 qq_28514109 的回复:] 那怎么办啊
写错,你是一开始就加载有重复的数据还是有刷新动作后才出现重复数据的?[/quote]刷新动作出现后有的
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
引用 28 楼 qq_28514109 的回复:
那怎么办啊
写错,你是一开始就加载有重复的数据还是有刷新动作后才出现重复数据的?
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
引用 28 楼 qq_28514109 的回复:
holder=new ViewHolder(); 放到 if 外面.
shonegg 2016-06-18
  • 打赏
  • 举报
回复
很明显啊,因为 adapter用 到holder去复用 view,每次都是再用同一个 view的拷贝,看看你的 if条件判断,如果是info数据是以2016开头,你的 view会重新设置 text, 如果不是以2016开头的呢,你没去做任何处理,如果这样,因为复用的原则,后面那些不满足条件的 item,都在显示之前的数据!
加载更多回复(26)

80,490

社区成员

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

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