2014-02-06 120 views
0

我有一個自定義列表視圖正在通過陣列適配器進行插入。Android:如何更新自定義列表視圖中的項目

每個項目/行包含三個按鈕和一些相關的textViews。 連續的所有元素都描述了雲中設備的詳細信息。所以數據是從雲端獲取的,然後列表中就會填充。行數等於設備的數量。

一切都很好,直到我添加了定期更新項目的功能。 問題是,在每次定期更新之後,它會將設備的數據寫入錯誤的行。 我嘗試了兩種刷新每一行的方法。

  1. 我一直在一個地圖(的DeviceID和視圖),然後根據設備ID 我會得到的觀點和更新。現在,這並沒有工作,因爲意見被重用,所以我滾動 下來,基本上相同的觀點被重新使用,以顯示新的數據。並且 因此前一個設備的地圖條目將被寫入新的 之一。

  2. 我試着直接打電話給getView()並通過這個職位,但是 也沒有工作。

我知道這些視圖被重用,因此無法準確知道哪個視圖與deviceID相關聯。 但是,有些人可以幫我弄清楚如何用正確的數據更新正確的視圖?

謝謝。

+0

[重用視圖的維護位置將幫助你解決](http://www.lalit3686.blogspot.in/2012/06/today-i-am-going-to-show-how-to-deal .html) –

回答

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瞭解更多詳情。

+0

沒問題,但是爲了更新,我只需調用getItem()並指定我想要更新的位置?這是如何工作的 – Sunny

+0

通過getItem()完成什麼任務? –

+0

不,我想根據位置更新某些行內的複選框和文字瀏覽項。所以當我想要做的時候,我只是打電話給該位置的getItem() – Sunny

相關問題