setListAdapter(adapter)。大概流程就这样,具体看帮助文档或者百度+google
CursorAdapter继承于BaseAdapter是个虚类,它为cursor和ListView提供了连接的桥梁。
public abstract class
CursorAdapter
extends BaseAdapter
直接子类只有ResourceCursorAdapter
Class Overview
Adapter that exposes data from a Cursor to a ListView widget.
The Cursor must include a column named "_id" or this class will not work.
注意cursor的必须要有个命名为"_id"的列。比如Contacts._ID就为"_id"
必须实现以下函数:
abstract ViewnewView(Context context, Cursor cursor, ViewGroup parent)
Makes a new view to hold the data pointed to by cursor.
abstract voidbindView(View view, Context context, Cursor cursor)
Bind an existing view to the data pointed to by cursor
注意:
newView该函数第一次回调用后,如果数据增加后也会再调用,但是重绘是不会调用的。
数据增加后,回调用该函数来生成与新增数据相对应的view。
bindView函数第一次回调用后,如果数据更新也会再调用,但重绘会再次调用的。
【总的来说应该是在调用bindView如果发现view为空会先调用newView来生成view】
i
[java]
view plaincopy
<span style="font-size:16px">mport java.util.List
import android.app.Activity
import android.app.ListActivity
import android.os.Bundle
import android.os.Handler
import android.content.Context
import android.content.ContentValues
import android.database.Cursor
import android.view.LayoutInflater
import android.view.View
import android.widget.ListView
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.CursorAdapter
import android.widget.TextView
import android.provider.ContactsContract.Contacts
import android.provider.ContactsContract.RawContacts
import android.view.View.OnClickListener
import android.widget.Button
public class HelloCursor extends ListActivity {
private static String[] PROJECTION = new String[] { Contacts._ID,
Contacts.DISPLAY_NAME }
/** Called when the activity is first created. */
@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 = 0i <nStringLengthi++) {
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")))
}
}
Android没有类似DataGridView的控件,你要显示数据库中查询的内容,可以通过ListView的方式,在ListView里面定义布局信息,实现出来的效果会跟DataGridView类似,但不能修改、改变格之间的距离等。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)