2013-03-05 35 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