0

好的,尝试从我的 SD 卡中获取图像以显示在活动ListView中。

我正在阅读很多提示,但我错过了一个重要的部分。我很想看到一个简短的源代码来说明这一点,还没有找到任何东西。

根据我的研究,这听起来像是在执行bindview()时被调用listview.setadapter(SimpleCursorAdapter adapter)。文档说,setImageView如果bindview无法ViewBinder处理ImageView.

您指定数组中的字段、FROM数组中的、id和视图组。然后将适配器设置为,瞧,它发生了。TextViewTOCursorTextViewListView

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

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

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

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

那么当bindView遇到 type 的 object 时ImageView,它会做什么呢?有没有像 in 这样的默认实现setTextView?我想这很难做到,图像差异很大。文本是文本,但图像具有格式、大小、深度、比例、位置等。传递给的字符串setTextView是文本,即有效负载。在图像中,字符串(可能)是文件名,只是图像的起点。

我想我需要使用包含文件名的数据库列名来构建我的适配器FROM。该TO数组将只有ImageView我的布局中的 id。我想我可以使用默认的 viewbinder bindview(),但必须重写setImageView()以获取预期的字符串(文件名),并构建图像加载行以在预期的应用程序路径中找到该图像名称。

所以这将是(也许):

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

这听起来对吗?如果有人可以填补缺失的空白和/或提供一些工作源代码,那将有很大帮助。顺便说一句,我已经编写了代码来执行此操作,但它不起作用。这可能是一个非常简单的错误,如果可行的话,不想停止这个线程。我想我只需要在正确的方向上稍微推动一下。

4

1 回答 1

4

我不太明白你的问题是什么(是的,你应该发布失败的代码)所以这是我的答案(你也可以在源代码中看到SimpleCursorAdapter):

在需要显示新的方法SimpleCursorAdapter时,将调用该方法。此方法将行构建委托给 2 个方法:(这将创建(膨胀您设置的 xml 布局)并将s 的数组与来自数组的数组设置为标记)和(实际上将数据绑定到由)创建。ListViewViewgetView()newView()ViewViewidstobindView()ViewnewView()

bindView()然后将遍历要在其上绑定数据的s数组ViewViews 和数组中的 s)。它还将从游标调用(并且只有方法,这很重要)以获取数据。接下来,该方法检查是否在适配器上设置了 a,如果是这种情况,它将让它设置数据(如果成功绑定数据,则不会调用该方法)。idtogetStringgetStringViewBinderViewBindersetTextView()setImageView()ViewBinder

如果 aViewBinder未在适配器或返回的setViewValue方法上设置(意味着已失败),则该方法将检查并查看它正在处理的类型(或)并调用or 。ViewBinderfalseViewBinderbindView()ViewTextViewImageViewsetViewText()setViewImage()

的实现setViewImage()将尝试将提供的 String 解析为 int(例如:图像 id R.drawable.image),如果失败,它将解析String为 anUrisetImageUri()ImageView. 因此,intlikeR.drawable.imageStringlike"file://mnt/sdcard/photo100.jpg"应该与 . 的默认实现一起使用SimpleCursorAdapter,否则会覆盖setImageView.

于 2012-04-02T18:15:49.743 回答