1
我下面從developer.android.com "Making ListView Scrolling Smooth"如何使用AsyncTask判斷項目是否在listview中被回收?
文章代碼的片段是:
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
我不明白什麼是變量「位置」是。爲什麼「v.position == position」可以判斷物品是否未被回收。
我試過這個想法:設置一個類變量的位置等於getView中的位置。但它不起作用。
而且我也找到了與之相似的代碼來執行異步任務 「Multithreading For Performance」, 它用「WeakReference的」判斷該項目是否存在。 兩種方式是否同樣有效?
謝謝。所以我應該設置一個類變量mPosition。讓mPosition =在getView()中的位置。讓viewHolder.position = getView()中的位置。在onPostExecute中,我將檢查viewHolder.position == mPosition。但是,這不起作用。請告訴我,我的上述邏輯是錯誤的。 – user1914692
你的意思是「這不起作用」是什麼意思? – Krylez
在我的列表中有4項。只有最後一項顯示圖標。其實我認爲mPosition會在適配器逐一訪問項目時發生變化。所以當4個項目在列表視圖中時,第一個項目仍然在執行異步任務,但getView導航到第二個項目。 – user1914692