2013-03-05 65 views
0

我有一個ListView應顯示包含一些文本和圖像的項目。使用SimpleCursorAdapter進行異步綁定

數據從本地SQLite db文件(包含文本和圖像URL)加載。

我想:

  • 從數據庫獲取文本,網址。
  • 異步下載URL中的圖像
  • 將兩個值綁定到ListView(使用SimpleCursorAdapter)。

到目前爲止,我能夠從數據庫中讀取值,但是我不確定如何在運行綁定後才能成功加載每個圖像?

換句話說,我想異步綁定每個元素,因爲它被加載到適當的UI項目。

+0

我假設你正在使用一個CursorLoader? – njzk2 2013-03-05 09:28:44

+0

no ...使用下載的AsynTask派生類 – 2013-03-05 09:31:00

回答

1

這裏是一個很好的例子,它顯示瞭如何這。

簡而言之,

1),你需要有一個Map<Url, Bitmap>
2)當服務器的圖像數據不可用時,顯示默認圖像。
3)讓您的ListView的onScroll偵聽器知道當前顯示哪些項目。
4)首先,下載那些正在顯示的。
5)下載圖像後,請撥notifyDataSetChanged()將可用圖像綁定到視圖。
6)您可以使用SoftreferencesLRUCache避免OutofMemoryException

+0

@sajith該網頁不可用 – dvrm 2015-07-12 07:44:47

+0

@dvrm看起來像他們刪除了頁面。你可以在StackOverFlow中查看類似的問題。 ex http://stackoverflow.com/questions/5458395/loading-images-from-remote-server – sujith 2015-07-14 07:39:27

-1

我已經解決了類似的問題這一點。我從服務器收到一個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