正文
一、结构
public abstract class SimpleCusrorTreeAdapter extends
ResourceCusorTreeAdpater
java.lang.Object
android.widget.BaseExpandableListAdapter
android.widget.CursorTreeAdapter
android.widget.ResourceCusorTreeAdapter
android.widget.SimpleCursorTreeAdapter
二、概述
这是一个用起来很方便的适配器类,它主要将Cursor与在XML文件中定义的TextView或ImageView进行映射。比如,你想设定要展示三列,那么当做好绑定之后,视图就会展示你设定好的那些列;当然了,视图的外观是定义在XML文件里面的,你只需用这个类与视图做好绑定就可以了。(译者注:Android推荐我们尽可能的将组视图和子视图分离开,也就是说不要把整体定义在一个布局文件当中。)与视图绑定有两个阶段。第一阶段:如果使用SimpleCursorTreeAdapter.ViewBinder
时,那么就会调用setViewValue(android.view.View, android.database.Cursor, int)
方法。该方法返回true就说明绑定成功,否则返回false,这就到了第二阶段,SimpleCursorAdapter内部开始自行绑定,过程是这样的,若绑定到TextView上,调用setViewText(TextView, String)
;若绑定到ImageView上,调用setViewImage(ImageView, String),
如果视图不是TextView或ImageView则抛出IllegalStateException异常。
三、内部类
public interface SimpleCursorTreeAdapter.ViewBinder
这个内部接口可以在外部通过SimpleCursorTreeAdapter.ViewBinder的方式进行 Cursor与View的绑定。
四、构造函数
public SimpleCursorTreeAdapter (Context context, Cursor cursor, int collapsedGroupLayout, int expandedGroupLayout, String[] groupFrom, int[] groupTo, int childLayout, int lastChildLayout, String[] childFrom, int[] childTo)
构造函数。
参数
context 上下文,多指ExpandableListView的上下文
cursor 数据库游标
collapsedGroupLayout 布局资源文件标识ID,其定义的是收缩时的ExpandableListView布局样式,并且内部至少要包含参数“groupTo”中指定的视图ID。
expandedGroupLayout 布局资源文件标识ID,其定义的是展开时的ExpandableListView布局样式,并且内部至少要包含参数“groupTo”中指定的视图ID。
groupFrom 列名列表,显示ExpandableListView的组节点。
groupTo 展示参数“groupFrom”中的列,也就是说ExpandableListView中的视图显示的是参数 “groupFrom”的列值,它们应该都是TextView或是ImageView。
childLayout 布局资源文件标识ID,其定义的是子视图的布局样式 (不包括最后一个子视图),内部至少要包含参数 “childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。
lastChildLayout 布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。
childFrom 列名列表,显示ExpandableListView的子节点。
childTo 展示参数“childFrom ”中的列,也就是说ExpandableListView中的视图显示的是参数 “childFrom ”的列值,它们应该都是TextView或是ImageView。
public SimpleCursorTreeAdapter (Context context, Cursor cursor, int collapsedGroupLayout, int expandedGroupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo)
构造函数。(译者注:该构造函数只是少了一个参数lastChildLayout)
参数
context 上下文,多指ExpandableListView的上下文
cursor 数据库游标
collapsedGroupLayout 布局资源文件标识ID,其定义的是收缩时的ExpandableListView布局样式,并且内部至少要包含参数“groupTo”中指定的视图ID。
expandedGroupLayout 布局资源文件标识ID,其定义的是展开时的ExpandableListView布局样式,并且内部至少要包含参数“groupTo”中指定的视图ID。
groupFrom 列名列表,显示ExpandableListView的组节点。
groupTo 展示参数“groupFrom”中的列,也就是说ExpandableListView中的视图显示的是参数 “groupFrom”的列值,它们应该都是TextView或是ImageView。
childLayout 布局资源文件标识ID,其定义的是子视图的布局样式 (不包括最后一个子视图),内部至少要包含参数 “childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。
childFrom 列名列表,显示ExpandableListView的子节点。
childTo 展示参数“childFrom ”中的列,也就是说ExpandableListView中的视图显示的是参数“childFrom ”的列值,它们应该都是TextView或是ImageView。
public SimpleCursorTreeAdapter (Context context, Cursor cursor, int groupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo)
构造函数。
参数
context 上下文,多指ExpandableListView的上下文
cursor 数据库游标
groupLayout 显示组元素的资源文件。该资源文件定义了如何显示组元素。该布局文件必须至少包括groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到)
groupFrom 列名列表,显示ExpandableListView的组节点。
groupTo 展示参数“groupFrom”中的列,也就是说ExpandableListView中的视图显示的是参数 “groupFrom”的列值,它们应该都是TextView或是ImageView。
childLayout 布局资源文件标识ID,其定义的是子视图的布局样式 (不包括最后一个子视图),内部至少要包含参数 “childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID,其定义的是最后一个子视图的布局样式,内部至少要包含参数“childTo”中指定的视图ID。
childFrom 列名列表,显示ExpandableListView的子节点。
childTo 展示参数“ childFrom ”中的列,也就是说 ExpandableListView 中的视图显示的是参数 “ childFrom ”的列值, 它们应该都是 TextView 或是 ImageView 。
五、公共方法
public SimpleCursorAdapter.ViewBinder getViewBinder ()
返回SimpleCursorTreeAdapter.ViewBinder
引用,这个ViewBinder用来将数据绑定到 视图上的。
返回值
如果ViewBinder不存在,则返回null。
参考
setViewBinder(android.widget.SimpleCursorTreeAdapter.ViewBinder)
public void setViewBinder (SimpleCursorTreeAdapter.ViewBinder viewBinder)
. 设置视图绑定器。
参数
viewBinder 视图绑定器。可以设置为null来删除已经存在的绑定器。
参考
public void setViewText (TextView v, String text)
仅当ViewBinder不存在或是当ViewBinder不为TextView绑定时(也就是setViewValue()返回false),则这个方法会被bindView()调用,以便为TextView设置文本。可重写适配器从数据库中检索过滤字符串。
参数
v 文本控件引用
value 为文本控件设置的文本信息(译者注:是从Cursor获取到的)。
六、受保护方法
protected void bindChildView (View view, Context context, Cursor cursor, boolean isExpanded)
通过参数cursor将数据绑定到已有的子视图上。。
参数
view 已有视图,返回之前调用newChildView创建的视图。
context 应用程序上下文
cursor 用于获取数据的Coursor。Coursor已经移到正确的位置。
isLastChild 子元素是否处于组中的最后一个
protected void bindGroupView (View view, Context context, Cursor cursor, boolean isExpanded)
通过参数cursor将数据绑定到已有组视图上。
参数
view 已有组视图,返回之前调用newGroupView创建的视图。
context 应用程序上下文
cursor 用于获取数据的Coursor。Coursor已经移到正确的位置。
isExpanded 组视图是否呈展开状态
protected void setViewImage (ImageView v, String value)
这个方法会被bindView()调用,以便为ImageView设置图片。默认情况下,参数value作为图片资源ID来看待,否则会视为图片的Uri。 另外还可以通过过滤器来获得更灵活的设置。
参数
v 图片控件引用
value 图片资源ID,是从Cursor获取到的。
七、补充
文章精选
示例代码
SimpleCursorTreeAdapter(深夜未眠).rar
SimpleCursorTreeAdapter.ViewBinder
译者署名: 深夜未眠
译者链接:http://chris1012f.javaeye.com/
翻译时间:2011-3-3
版本:Android 3.0 r1
结构
继承关系
public static interface SimpleCusrorTreeAdapter.ViewBinder
java.lang.Object
android.widget.SimpleCursorTreeAdapter.ViewBinder
类概述
这个内部接口可以在外部通过SimpleCursorTreeAdapter.ViewBinder的方式进行 Cursor与View的绑定。Android推荐我们采用这种方式进行绑定操作,而不是沿用SimpleCursorTreeAdapter内部的方式。
参见
setViewImage(ImageView, String)
公共方法
public abstract boolean setViewValue (View view, Cursor cursor, int columnIndex)
将指定的列数据绑定到指定的视图上。当ViewBinder处理绑定时,这个方法必须返回true;否则SimpleAdapter将尝试通过其内部默认的方法绑定数据。
参数
view 被绑定的视图。
cursor 数据库游标,绑定数据从它这里获取
columnIndex 列位置,能够在数据库游标中寻找到。
返回值
返回 true 意味着数据与视图已经绑定上,否则为未绑定上。