Android:如何更新自定义列表视图中的项目

时间:2014-02-06 12:00:46

标签: android android-listview android-arrayadapter

我有一个自定义列表视图,它通过数组适配器弹出。

每个项目/行包含三个按钮和一些相关的textViews。 一行中的所有元素都描述了云上设备的详细信息。因此,从云中获取数据,然后填充列表。行数等于设备数量。

在我添加功能以定期更新项目之前,一切都很好。 问题是每次定期更新后,它会将设备的数据写入错误的行。 我尝试了两种方法来刷新每一行。

  1. 我保留了(DeviceID和视图)的地图,然后基于deviceId 我会得到视图并更新它。现在,这不起作用,因为视图被重用,所以我滚动 向下,基本上相同的视图被重用用于显示新数据。和 所以先前设备的地图条目用新的覆盖 之一。

  2. 我试图直接拨打getView()并传递位置但是 也没用。

  3. 我理解视图会被重用,因此无法确切知道哪个视图与deviceID相关联。 但有些人可以帮我弄清楚如何使用正确的数据更新正确的视图吗?

    感谢。

1 个答案:

答案 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了解更多详情。