0

OK时,试图从我的SD卡图像在活动ListView显现。生命周期使用SimpleCursorAdapter.setViewImage

我正在阅读很多提示,但我错过了一个重要的块。我很想看到一小段代码说明了这一点,还没有发现任何东西。

从我的研究,它听起来就像当执行listview.setadapter(SimpleCursorAdapter adapter)bindview()被调用。该文档说如果ViewBinder无法处理ImageViewsetImageViewbindview调用。

您的FROM阵列中指定字段中,TO阵列中的TextViewid,所述Cursor,并与TextView视图组。然后将适配器设置为ListView,然后发生。

我想调用顺序则是: listView.setAdapter(SimpleCursorAdapter adapter)->adapter.bindView()->adapter.setTextView

Bindview必须确定视图的类型TextView, determine that it can bind it, passes the的TextView and text value from the cursor and setTextView`做的事情。

所以,这使得呼吁的ImageView非常相似的,对不对?

listViw.setAdapter(SimpleCursorAdapter adapter)->adapter.bindView()->adapter.setImageView 

所以,当bindView遇到和ImageView类型的对象,它有什么作用?是否有像setTextView这样的默认实现?我想这很难做到,图像差别很大。文字是文字,但图像有格式,大小,深度,比例,位置等等。传递给setTextView的字符串是文本,有效载荷。在图像中,字符串(可能)是文件名,只是图像的起点。

我想我会需要建立我的适配器与持有FROM文件名中的数据库列名。 TO数组在我的布局中将只有ImageView的ID。我想我可以使用默认的viewbinder bindview(),但必须覆盖setImageView()采取期望的字符串(文件名),并打造出了图像加载线找到预期的应用程序路径图像名称。

所以这将是(也许):

listView.setAdapter(MyOwnSimpleCursorAdapter myOwnAdapter)->myOwnAdapter.super.bindView()->myOwnAdapter.setImageView() 

这听起来是正确的?如果任何人都可以填补缺失的空白和/或提供一些工作的源代码,这将有很大帮助。顺便说一句,我已经写了代码来做到这一点,但它不起作用。这可能是一个非常简单的错误,如果它可行,不想停止这个线程。我想我只需要在正确的方向上轻轻一点。

回答

4

我不太明白什么是你的问题(是的,你应该张贴的代码失败件),所以这里是我的回答(你也可以看到这个在SimpleCursorAdapter的源代码):

SimpleCursorAdapterListView要求要显示getView()将被调用的方法新View。此方法将行构建委托给两种方法:newView()(它将创建View(使您设置的xml布局膨胀),并设置为View的阵列,其中ids的阵列为to)和bindView()(其中将实际上将数据绑定到由newView()创建的View)。然后

bindView()将通过View秒(View s的从to阵列id多个)在其上结合该数据阵列迭代。它也会从光标处调用getString(并且只有getString方法,这很重要)来获取数据。接下来,该方法检查是否在适配器上设置了ViewBinder,如果是这种情况,则会让ViewBinder设置数据(如果ViewBinder成功绑定数据,则不会调用方法setTextView()setImageView())。

如果ViewBinder未设置适配器或ViewBinder回报false(意为ViewBinder失败)的setViewValue方法上则bindView()方法检查,看看它在处理(TextViewImageView哪种类型的View )并致电setViewText()setViewImage()

setViewImage()的实施将尝试解析提供的字符串作为一个int(例如:图像ID R.drawable.image)和如果失败,将然后解析String作为Uri并在ImageView使用setImageUri()。因此intR.drawable.imageString"file://mnt/sdcard/photo100.jpg"应与SimpleCursorAdapter的默认实现一起使用,否则覆盖setImageView

+0

太好了,谢谢你的详细回答,特别是考虑到我的问题很难找到所有这些措词。这个问题有点儿“这听起来不错吗?” 我不知道调用getView()和newView(),但关于setViewImage如何超级有用的额外细节。我还没有去源代码的答案,只是文件。另一个好的提示... – JustSomeGuy 2012-04-02 20:05:28

+0

我的代码也没有失败,本身,它只是没有显示任何图像。这是因为从数据库返回的字符串只是文件名,而不是Uri的“photo100.jpg”与“file://mnt/sdcard/photo100.jpg”。 我将切换到存储图像的完整路径,如果我决定支持多个位置的图像,这将更好。 – JustSomeGuy 2012-04-02 20:32:25