我有一個ListView
應顯示包含一些文本和圖像的項目。使用SimpleCursorAdapter進行異步綁定
數據從本地SQLite
db文件(包含文本和圖像URL)加載。
我想:
- 從數據庫獲取文本,網址。
- 異步下載URL中的圖像
- 將兩個值綁定到
ListView
(使用SimpleCursorAdapter
)。
到目前爲止,我能夠從數據庫中讀取值,但是我不確定如何在運行綁定後才能成功加載每個圖像?
換句話說,我想異步綁定每個元素,因爲它被加載到適當的UI項目。
我有一個ListView
應顯示包含一些文本和圖像的項目。使用SimpleCursorAdapter進行異步綁定
數據從本地SQLite
db文件(包含文本和圖像URL)加載。
我想:
ListView
(使用SimpleCursorAdapter
)。到目前爲止,我能夠從數據庫中讀取值,但是我不確定如何在運行綁定後才能成功加載每個圖像?
換句話說,我想異步綁定每個元素,因爲它被加載到適當的UI項目。
這裏是一個很好的例子,它顯示瞭如何這。
簡而言之,
1),你需要有一個Map<Url, Bitmap>
。
2)當服務器的圖像數據不可用時,顯示默認圖像。
3)讓您的ListView
的onScroll偵聽器知道當前顯示哪些項目。
4)首先,下載那些正在顯示的。
5)下載圖像後,請撥notifyDataSetChanged()
將可用圖像綁定到視圖。
6)您可以使用Softreferences
或LRUCache
避免OutofMemoryException
我已經解決了類似的問題這一點。我從服務器收到一個XML並將信息存儲在數據庫中。之後,我使用CursorAdapter填充列表。在我的情況下,我有圖像和文字。
爲了解決這個問題,在光標適配器我做了這樣的事情:
@Override
public void bindView(View v, Context ctx, Cursor c) {
TextView title = (TextView) v.findViewById(R.id.titleID);
title.setText(c.getString(c.getColumnIndex(yourColumName)));
ImageView i = (ImageView) v.findViewById(R.id.ImageID);
String s = c.getString(c.getColumnIndex(youtImageColumn));
imageLoader.DisplayImage(s,i);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = inflater.inflate(R.layout.yourRowLayout, parent, false);
return v;
}
在這種情況下,ImageLoader的是異步懶圖像加載器從這裏得到: https://github.com/thest1/LazyList
我假設你正在使用一個CursorLoader? – njzk2 2013-03-05 09:28:44
no ...使用下載的AsynTask派生類 – 2013-03-05 09:31:00