2010-09-26 80 views
0

我們假設我得到了帶有LinearLayout的ImageView和TextView列表。 現在我使用簡單的ArrayAdapter擴展,它獲取Strig [] []作爲雙字符串數組的項目(每個條目包含String [2],其中第一個字符串是圖像的一個URI,第二個是文本。我重寫getView來顯示圖像和文本,當然還有recyling視圖:-)。 但是,由於圖像加載,即使從資源可能會很慢,我在異步任務中,這意味着我有一個默認圖像加載,我用:startLoading(這是我的方法),使ImageView和Uri一旦圖像準備就緒,它將它放置在圖像視圖中。檢查android列表項目(Drawable)是否仍然可見

但有時,因爲它是一個列表,如果圖像尚未加載,並且我處於進程的中間,這是值得的,同時停止加載,這是萬一,我加載圖像的行是更長的可見度

由於視圖被回收,我無法檢查ImageView是否可見,因爲它可能是可見的但帶有不同的Drawable ...有沒有辦法讓我知道某些時候我的行在無效且不可見?有沒有簡單的方法或shell我需要開始使用標誌和標籤模式和類似的東西來發現我的線不再有效?

回答

1

我所做的是基於ListView如何管理它的視圖。

至於有一組有限意見的真正使用的ListView和可能通過getView()方法的convertView參數傳遞給我們的適配器,我實現了以下內容:

  • 我有一個LinkedList類成員,用於存儲要加載的Uris。這些Uris被AsyncTask成員使用來檢索圖片。
  • 在返回getView()中的項目視圖之前,我的適配器將項目pic的Urin放置在View.setTag(Object)中。
  • 當我重新使用convertView時,在重新使用它的內容之前,我得到了之前使用View.getTag()鏈接到的Uri,並從掛起的Uris LinkedList中刪除相應的元素。
+0

這是一個很好的解決方案,但它不是我正在尋找的。我顯示圖像的條件是:(圖像被檢索到&&圖像線仍然可見)。你確實回答了這兩個條件,但是如果圖像被檢索到並且在你的場景中仍然可見,它就不會顯示,因爲你只會將圖像放在重用中,你需要一個列表全局重繪或至少整個視圖重畫爲了該系統工作。 – codeScriber 2010-09-26 15:48:02

+0

我剛纔描述的系統,以避免加載不再需要的圖片,因爲用戶進一步滾動。 AsyncTask通知適配器在圖像加載時更新項目ImageView,無論是否爲重用視圖。適配器會在已加載的情況下放置圖片,如果沒有,則放置默認圖片。 – 2010-09-26 16:00:21

+0

這跟我在做的事很接近,所以讓我確定: 1.你把一個默認圖像 2.你開始一個異步任務來加載圖像 - 保存一個ImageView實例3.一次您將Drawable放入標籤並調用適配器的dataChanged,任務完成了嗎? – codeScriber 2010-09-26 16:03:03

相關問題