SimpleCursorAdapter介绍
来源:互联网 发布:全球人工智能产业规模 编辑:程序博客网 时间:2024/04/30 11:08
最近做播放器方面app,用到的这个类,感觉还是不能很理解,下面参考官方 文档加上自己的理解,整理成这篇文章,并记下来。
该类的作用 或者说是目的就是将一个Cursor的所有列分别绑定 到ImageView或者是TextView,你可以选择这个Cursor中你想要显示的列:
String[] cols = new String[] { MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ARTIST, MediaStore.Audio.Albums.ALBUM, MediaStore.Audio.Albums.ALBUM_ART };Cursor cursor = getContentSolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, cols, null, null, MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);
这样你就得到 了一个Cursor且选择了其中的4列_ID、ARTIST、ALBUM,ALBUM_ART。注意当你将该cursor绑定到view时,确定有显示这4项内容的view。
你也可以定义每个view的外观,在view的XML文件中定义。
绑定:
两种方式 :
如果android.widget.SimpleCursorAdapter.ViewBinder可用,则其setViewValue(android.view.View, android.database.Cursor, int)会被调用,如果该方法的返回值为true,则绑定成功,如果返回false,则进行TextView绑定,setViewText(TextView, String)会被调用。假设setViewText(TextView, String)返回true,则说明绑定成功,如果返回false,则接下来要进行ImageView绑定,setViewImage(ImageView, String),如果此方法再绑定失败则抛出IllegalStateException异常。
先看构造函数:
a. public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
这个构造函数其实已经弃用,原因是这会导致ContentSlover的query在UI线程中进行,但是你可以写一个类继承此类,从而初始化变量。
b.
public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,int[] to, int flags) { super(context, layout, c, flags); mTo = to; mOriginalFrom = from; findColumns(c, from); }
参数
context:该listview和该SimpleCursorAdapter运行的环境;
layout :是每一列的layout,其中必须包含在to参数中定义的view;
c:the Cursor;
from:是一个需要绑定到to中定义的view的数据;
to:多个view,用来装from的数据;
flag:定义该adapter的行为。
其中,private void findColumns(Cursor c, String[] from) 的作用是将from中定义的数据映射到c中的_id中,实际使用时一般将c设为null,则此时该from会被忽略。
public void bindView(View view, Context context, Cursor cursor)该方法的作用是将传递给构造器中to参数的view,绑定到cursor中的clumn,也就是传递给from参数的数据。这些方法实际用时一般都会重写。
下面简单介绍下newView(…)和bindView(…)这两个函数是Android系统的newView(…)、bindView(…)的代理,具体怎么实现的我也不知道,但是在SimpleCursorAdapter中,这两种方法是在changeCursor(Cursor cursor)后才调用的,所以可以把changeCursor(Cursor cursor)的作用等同ArrayAdapter<>的add方法。而在newView(…),则可以创建每个item实例,在bindView(…)是将newView()中创建的item初始化即绑定到Cursor中的数据上。
private class ViewHolder { TextView song_title; TextView song_album; TextView song_singer; } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View v = super.newView(context, cursor, parent); ViewHolder viewHolder = new ViewHolder(); viewHolder.song_title = (TextView)v.findViewById(R.id.song_title); viewHolder.song_album = (TextView)v.findViewById(R.id.song_album); viewHolder.song_singer = (TextView)v.findViewById(R.id.song_singer); if(viewHolder.song_singer==null||viewHolder.song_title==null||viewHolder.song_album==null) Log.d(TAG,"something is null..."); v.setTag(viewHolder); return v; } @Override public void bindView(View view, Context context, Cursor cursor) { super.bindView(view, context, cursor); ViewHolder vh = (ViewHolder)view.getTag(); Log.d(TAG,"the number of cursor column is:"+cursor.getCount()); String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)); if(vh==null) { Log.d(TAG,"vh is null..."); return; } if(vh.song_title==null) { Log.d(TAG,"vh.song_title is null"); return; } if(title==null) { Log.d(TAG,"title is null..."); return; } vh.song_title.setText(title); String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)); vh.song_album.setText(album); String singer = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)); vh.song_singer.setText(singer); }
- SimpleCursorAdapter介绍
- SimpleCursorAdapter
- SimpleCursorAdapter
- simpleCursorAdapter刷新
- simpleCursorAdapter刷新
- simpleCursorAdapter刷新
- 使用SimpleCursorAdapter
- SimpleCursorAdapter() 是 SimpleCursorAdapter 类的构造函数。
- SimpleCursorAdapter的简单使用方法
- SimpleCursorAdapter ---的学习
- android simpleCursorAdapter 注意项
- simpleCursorAdapter的一个问题
- ArrayAdapter ,SimpleAdapter ,SimpleCursorAdapter 区别
- ListActivity和SimpleCursorAdapter
- SQlite实例 SimpleCursorAdapter操作
- SimpleCursorAdapter和_id
- SimpleCursorAdapter ,SQLiteDatebase,ContentProvider 合用
- SimpleCursorAdapter 的使用
- gcc & makefile
- iOS版本更新提示
- windows 64位使用redis
- setTimeout() 和setInterval()函数的比较
- 解析Crash日志(二)
- SimpleCursorAdapter介绍
- 下拉刷新
- 39. Combination Sum
- 决策树sama
- POJ题目分类 很好很有层次感
- Google Mock(Gmock)简单使用和源码分析——简单使用
- 【BZOJ1500】【codevs1758】维修数列,简析Splay的综合操作
- hdu 5676ztr loves lucky numbers(全排列函数)
- 【问题解决】Replace "..." with ellipsis character (…, &&;#8230;) ?