我有一个自定义列表视图,它通过数组适配器弹出。
每个项目/行包含三个按钮和一些相关的textViews。 一行中的所有元素都描述了云上设备的详细信息。因此,从云中获取数据,然后填充列表。行数等于设备数量。
在我添加功能以定期更新项目之前,一切都很好。 问题是每次定期更新后,它会将设备的数据写入错误的行。 我尝试了两种方法来刷新每一行。
我保留了(DeviceID和视图)的地图,然后基于deviceId 我会得到视图并更新它。现在,这不起作用,因为视图被重用,所以我滚动 向下,基本上相同的视图被重用用于显示新数据。和 所以先前设备的地图条目用新的覆盖 之一。
我试图直接拨打getView()
并传递位置但是
也没用。
我理解视图会被重用,因此无法确切知道哪个视图与deviceID相关联。 但有些人可以帮我弄清楚如何使用正确的数据更新正确的视图吗?
感谢。
答案 0 :(得分:0)
如果您使用的是Holder模式,则有一种方法可以执行此操作。
第1步:添加一个属性,即位置到持有人。
private class ViewHolder {
....
....
int position;
}
步骤2:将持有人位置初始化为getView()
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
...
holder.position = position;
}
....
}
第3步:检查支架位置和视图的位置值。如果两者相同则执行任务。
if (mHolder.position == mPosition) {
// This is you required row. Do your task.
}
阅读Async loading了解更多详情。