Android 使用SimpleCursorAdapter.setViewImage时调用的生命周期
好的,尝试从我的SD卡中获取图像以显示在活动Android 使用SimpleCursorAdapter.setViewImage时调用的生命周期,android,android-imageview,simplecursoradapter,android-viewbinder,Android,Android Imageview,Simplecursoradapter,Android Viewbinder,好的,尝试从我的SD卡中获取图像以显示在活动列表视图中 我读了很多提示,但我遗漏了一个重要的部分。我想看一小段说明这一点的源代码,但还没有找到任何东西 根据我的研究,执行listview.setadapter(SimpleCursorAdapter适配器)时,会调用bindview()。文档说明,如果ViewBinder无法处理ImageView,则setImageView由bindview调用 您可以指定FROM数组中的字段、TO数组中文本视图的id、光标以及具有文本视图的视图组。然后将适配器
列表视图中
我读了很多提示,但我遗漏了一个重要的部分。我想看一小段说明这一点的源代码,但还没有找到任何东西
根据我的研究,执行listview.setadapter(SimpleCursorAdapter适配器)
时,会调用bindview()
。文档说明,如果ViewBinder
无法处理ImageView
,则setImageView
由bindview
调用
您可以指定FROM
数组中的字段、TO
数组中文本视图
的id
、光标
以及具有文本视图
的视图组。然后将适配器设置为列表视图
,瞧,它发生了
我认为通话顺序是:
listView.setAdapter(SimpleCursorAdapter)->adapter.bindView()->adapter.setTextView
Bindview必须确定视图的类型为TextView,确定它可以绑定它,从光标传递
TextView和文本值,然后
setTextView`执行它的操作
因此,对ImageView
的调用非常相似,对吗
listViw.setAdapter(SimpleCursorAdapter adapter)->adapter.bindView()->adapter.setImageView
所以当遇到类型为ImageView
的对象时,它会做什么?是否有类似于setTextView
中的默认实现?我想这很难做到,因为图像变化太大了。文本是文本,但图像具有格式、大小、深度、比例、位置等。传递到setTextView
的字符串是文本,即有效负载。在图像中,字符串(可能)是文件名,只是图像的起点
我想我需要使用数据库列名来构建适配器,该列名保存来自的中的文件名。TO
数组在我的布局中只有ImageView
的id。我想我可以使用默认的viewbinder bindview(),但必须重写setImageView()
以获取预期的字符串(文件名),并构建图像加载行以在预期的应用程序路径中找到该图像名称
因此,这将是(也许):
这听起来对吗?如果有人能填补缺失的空白和/或提供一些可用的源代码,这将非常有帮助。顺便说一句,我已经编写了代码来实现这一点,但它不起作用。这可能是一个非常简单的bug,如果它可以的话,就不想停止这个线程。我想我只需要在正确的方向上稍微推动一下。我不太明白你的问题是什么(是的,你应该发布失败的代码),所以这里是我的答案(你也可以在SimpleCorsorAdapter
的源代码中看到这一点):
在SimpleCursorAdapter
中,当ListView
需要显示新的视图时,将调用方法getView()
。此方法将行生成委托给两种方法:newView()
(这将创建视图
(膨胀您设置的xml布局),并将视图的数组设置为标记,其中ID
从到数组)和bindView()
(这将实际将数据绑定到由newView()
创建的View
)
bindView()
然后将遍历View
s的数组(从到数组的View
s和id
s)来绑定数据。它还将调用getString
(只有getString
方法,这一点很重要)接下来,该方法检查适配器上是否设置了ViewBinder
,如果是这种情况,它将让该ViewBinder
设置数据(如果ViewBinder
成功绑定数据,将不会调用setTextView()
和setImageView()
方法)
如果适配器上未设置ViewBinder
,或者ViewBinder
的setViewValue
方法返回false
(表示ViewBinder
失败),则bindView()
方法将检查并查看它处理的是哪种类型的View
(TextView
或ImageView
)并调用setViewText()
或setViewImage()
setViewImage()
的实现将尝试将提供的字符串解析为int
(例如:图像idR.drawable.image
),如果失败,则将字符串
解析为Uri
,并使用setImageUri()
在图像视图上
这样一个int
像R.drawable.image
或者一个字符串
像“file://mnt/sdcard/photo100.jpg"
应该与SimpleCursorAdapter
的默认实现一起工作,否则将覆盖setImageView
我不太明白您的问题是什么(是的,您应该发布失败的代码),因此下面是我的答案(您也可以在SimpleCursorAdapter
的源代码中看到这一点):
在SimpleCursorAdapter
中,当ListView
需要显示新的视图时,将调用方法getView()
。此方法将行生成委托给两个方法:newView()
(这将创建视图
(扩展您设置的xml布局)并将视图
的数组设置为标记,其中包含ID
从到数组)和绑定视图()
(这将实际将数据绑定到由新建视图()创建的视图
)
bindView()
然后将遍历View
s的数组(带有
listView.setAdapter(MyOwnSimpleCursorAdapter myOwnAdapter)->myOwnAdapter.super.bindView()->myOwnAdapter.setImageView()