CursorAdapter类的使用
来源:互联网 发布:淘宝代购网店 注册 编辑:程序博客网 时间:2024/04/30 12:23
CursorAdapter继承于BaseAdapter,它是个虚类,它为cursor和ListView提供了连接的桥梁。
publicabstract class
CursorAdapter
extends BaseAdapter
直接子类只有ResourceCursorAdapter
ClassOverview
Adapterthat exposes data from a Cursor to a ListView widget.
TheCursor must include a column named "_id" or this class will not work.
注意cursor的必须要有个命名为"_id"的列。比如Contacts._ID就为"_id"
必须实现以下函数 :
abstractView newView(Context context, Cursor cursor, ViewGroup parent)
Makes a new view to hold the data pointed to by cursor.
abstractvoid bindView (View view, Context context, Cursor cursor)
Bind an existing view to the data pointed to by cursor
注意:
newView该函数第一次回调用后,如果数据增加后也会再调用,但是重绘是不会调用的。
数据增加后,回调用该函数来生成与新增数据相对应的view。
bindView函数第一次回调用后,如果数据更新也会再调用,但重绘会再次调用的。
【总的来说应该是在调用bindView如果发现view为空会先调用newView来生成view】
importjava.util.List;
importandroid.app.Activity;
importandroid.app.ListActivity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.content.Context;
importandroid.content.ContentValues;
importandroid.database.Cursor;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.widget.ListView;
importandroid.view.ViewGroup;
importandroid.widget.ArrayAdapter;
importandroid.widget.CursorAdapter;
importandroid.widget.TextView;
importandroid.provider.ContactsContract.Contacts;
importandroid.provider.ContactsContract.RawContacts;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
publicclass HelloCursor extends ListActivity {
private static String[] PROJECTION = new String[] { Contacts._ID,
Contacts.DISPLAY_NAME };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Cursor c = getContentResolver().query(Contacts.CONTENT_URI, PROJECTION,
null, null, Contacts.DISPLAY_NAME + " COLLATE NOCASE");
startManagingCursor(c);
MyCursorAdapter adapter = new MyCursorAdapter(this, R.layout.list_row,
c);
this.setListAdapter(adapter);
Button button = (Button)findViewById(R.id.Button01);
OnClickListener listener=new OnClickListener(){
@Override
public void onClick(View v) {
doAction();
}
};
button.setOnClickListener(listener);
mHandler = new Handler();
}
private String[] mStrings = { "hubin", "hudashi", "robin" };
int cnt = 0;
private Handler mHandler;
class AddContactThread implements Runnable {
public void run() {
int nStringLength = mStrings.length;
int randomNumber = 0;
ContentValues newValues = new ContentValues();
String tempString = null;
randomNumber = (int) (Math.random() % 10);
for (int i = 0; i < nStringLength; i++) {
tempString = mStrings + cnt + randomNumber;
newValues.put(Contacts.DISPLAY_NAME, tempString);
getContentResolver().insert(RawContacts.CONTENT_URI, newValues);
newValues.clear();
}
cnt++;
}
}
AddContactThread addContact=new AddContactThread();
void doAction()
{
mHandler.post(addContact);
}
}
class MyCursorAdapter extends CursorAdapter {
Context context=null;
int viewResId;
public MyCursorAdapter(Context context, int resource, Cursor cursor) {
super(context,cursor);
viewResId=resource;
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
TextView view =null;
LayoutInflater vi = null;
vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view =(TextView)vi.inflate(viewResId, parent, false);
//v =(TextView)vi.inflate(textViewResourceId,null);
Log.i("hubin","newView"+view);
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
Log.i("hubin","bind"+view);
TextView nameView = (TextView) view;
// Set the name
nameView.setText(cursor
.getString(cursor.getColumnIndex("DISPLAY_NAME")));
}
}
附1:关于newView和bindView一测试结果
newViewandroid.widget.TextView@43b98ea0
bindandroid.widget.TextView@43b98ea0
newViewandroid.widget.TextView@43b99948
bindandroid.widget.TextView@43b99948
newViewandroid.widget.TextView@43b9a3f0
bindandroid.widget.TextView@43b9a3f0
add
bindandroid.widget.TextView@43b9a3f0
bindandroid.widget.TextView@43b99948
bindandroid.widget.TextView@43b98ea0
newViewandroid.widget.TextView@43b9c5b0
bindandroid.widget.TextView@43b9c5b0
newViewandroid.widget.TextView@43b9d058
bindandroid.widget.TextView@43b9d058
newViewandroid.widget.TextView@43b9db00
bindandroid.widget.TextView@43b9db00
public
直接子类只有ResourceCursorAdapter
Class
Adapter
The
注意cursor的必须要有个命名为"_id"的列。比如Contacts._ID就为"_id"
abstract
abstract
注意:
newView该函数第一次回调用后,如果数据增加后也会再调用,但是重绘是不会调用的。
数据增加后,回调用该函数来生成与新增数据相对应的view。
bindView函数第一次回调用后,如果数据更新也会再调用,但重绘会再次调用的。
【总的来说应该是在调用bindView如果发现view为空会先调用newView来生成view】
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
public
}
class
}
附1:关于newView和bindView一测试结果
newView
bind
newView
bind
newView
bind
add
bind
bind
bind
newView
bind
newView
bind
newView
bind
0 0
- CursorAdapter类的使用
- Android CursorAdapter的使用
- CursorAdapter的使用
- 使用CursorAdapter的注意啦
- listview上的CursorAdapter使用
- CursorAdapter使用
- CursorLoader和CursorAdapter的配合使用
- ListView+CursorAdapter+LoaderManger的配合使用
- BaseAdapter与CursorAdapter的结合使用举例
- Android中CursorAdapter的使用详解
- CursorAdapter的使用:获取手机联系人
- CursorAdapter和AsyncQueryHandler的简易使用
- Android中CursorAdapter的使用详解
- Android 使用自定义cursorAdapter
- 【android】使用CursorAdapter注意事项
- RecyclerView使用:深入 CursorAdapter
- Android使用之CursorAdapter
- android本地较大的本地数据显示,cursoradapter的使用
- windows下游戏服务器端框架Firefly安装说明及demo运行
- 用svn管理项目时,复制文件的注意事项
- NBA总决赛第三战:热火主场取胜 扩大领先优势
- DM8168 PWM驱动与测试程序
- 正则表达式
- CursorAdapter类的使用
- 解决:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Java Socket收发异步长连接
- 谈谈静态变量和实例变量的区别?
- [cell.imageView.subviews.firstObject removeFromSuperview];
- call指令用法
- Velocity + flying sauser生成pdf
- 反向代理服务器的工作原理
- 观察者模式