2012-12-27 14 views
0

我試圖通過適配器創建的所有View的動畫。當我向下滾動時,它會正確顯示動畫,但當我向上滾動時,我會看到這些View重新創建並再次顯示動畫。然後,當我向下滾動時,它又發生了。顯示從自定義適配器創建的視圖的動畫

我的假設是,從適配器創建View的機制是將View加載到內存中;只是現在在屏幕上的View s組(但在視圖的上方和下方未加載到內存中)。當我滾動到這些視圖時,這些會再次加載,對吧?

有什麼辦法解決這個問題嗎? PS:對不起,我的英文,我希望你能理解我的問題。

回答

0

我的假設是,從適配器 創建視圖的機制是將視圖加載到內存中;只是用組是 屏幕上現在瀏覽的(但上面和下面的意見不會被加載到 內存)

這是有些正確的:一個ListView不會試圖想象,是不是任何數據(在至少部分)可見。它還「回收」了視圖,這意味着任何當前未用於向用戶呈現數據並與下一個數據項具有相同「類型」的視圖可能會被重用。

因此,您不應該依賴對特定視圖的存在持續數據或做出任何假設。相反,使用與視圖分開的東西;例如您正在顯示的數據集。

很多時候,你會提供一個POJO列表BaseAdapterArrayAdapter。您可以簡單地將一個布爾值添加到POJO中,指示是否應該設置動畫效果,並在該特定項目的動畫完成時更改該布爾值。或者,您可以在單獨的集合中跟蹤這些值(如果您將Cursor作爲數據源而不是POJO處理,則這可能是更直接的方法)。

+0

你能舉個例子嗎?我很新手關於android開發 – aratn0n

+0

樣本很普遍。 [給這個人一個去](http://www.vogella.com/articles/AndroidListView/article.html#listadvanced_interactive),並確保你滾動頁面,如果你發現很難理解發生了什麼事情。在你的情況下,你需要爲'Model'對象添加一個布爾值,該布爾值指示列表項(以及它的行視圖)之前是否已經被動畫。每當動畫結束時您都需要更改其值,並且每次設置後都不要再次啓動它。 –