展开全部

CursorAdapter

继承e68a84e8a2ad62616964757a686964616f31333361303030于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 View newView(Context context, Cursor cursor, ViewGroup parent)

Makes a new view to hold the data pointed to by cursor.

abstract void 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】

i

[java]

view plaincopy

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 = 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")));

}

}

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐