Android之CursorAdapter用法
用途:实时更新
public
直接子类只有ResourceCursorAdapter
Class
Adapter
The
注意cursor的必须要有个命名为" _id "的列。比如Contacts._ID就为" _id "
abstract
abstract
注意:
newView该函数第一次回调用后,如果数据增加后也会再调用,但是重绘是不会调用的。
数据增加后,回调用该函数来生成与新增数据相对应的view。
bindView函数第一次回调用后,如果数据更新也会再调用,但重绘会再次调用的。
【总的来说应该是在调用bindView如果发现view为空会先调用newView来生成view】
i
- "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 }; -
-
-
@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"))); -
} - }