2011-02-16 87 views
2

是否有可能在Android中爲ListView定義'虛擬大小',從而讓它在屏幕上可見之前分配更多視圖並提前獲取這些視圖?例如,如果我的listview是400px高,我的項目是100px高,listview將分配~5個項目視圖,並重復使用這些列表滾動。是否有可能爲listview(off-screen)定義一個虛擬的頭部和尾部大小,使得這個空間中的項目是getView()?Android ListView的虛擬大小?

我的問題:我有一個項目列表,每個項目包含從存儲(SD卡)讀取異步照片。這在物品準備就緒時需要一定的等待時間。當我扔掉這個列表時,正在加載的新項目的幾個頂部/底部(投擲向下/向上)數量。系統可以保持=>吞吐量正常,但讀取延遲是問題。如果listview可能有一些額外的屏幕外滾動項目,這可能會解決我的問題。

任何輸入?

回答

1

我有一個類似的問題(圖像加載到一個GridView異步),我通過在GridView子類覆蓋onMeasure()解決。 ListView有same method。我的代碼看起來是這樣的:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    setMeasuredDimension(getMeasuredWidth(), getMeasuredHeight() + 500); 
} 

按我的理解,這將使觀點認爲,這是大於它實際上是在屏幕上,使其保持更多的屏幕外的看法活着,而不是進行再利用。您可以將500更改爲任何大小,以便爲應用程序預載足夠的圖像。

不幸的是,我發現這在向上滾動(僅向下)時不起作用。我一直無法弄清楚這是爲什麼。

0

爲什麼不在AsyncTask中加載圖像Arraylist而不是延遲加載? 你也應該考慮使用ViewHolder如下所示,使您的適配器效率:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

+0

圖像由2級緩存(內存+文件)支持,但因爲我可能有1000多個項目,所以將它們全部加載到數組中不是一種選擇。我的原始文章中描述的延遲問題發生在我有內存緩存未命中並且圖像必須從sd卡加載時。 已經使用CursorAdapter(由sqlite支持的內容提供者提供的數據)+ ViewHolder模式。 – toucan 2011-02-16 12:31:37