CursorAdapter使用:获取手机联系并人显示
在上一篇中介绍了一下ListView中BaseAdapter的使用,现在主要介绍一下CursorAdapter的使用
1 CursorAdapter基础知识:CursorAdapter是继承BaseAdapter的,然后重写两个抽象方法,newView()和bindView();newView并不会每一次都会调用(listview的复用),而bindView每一次都会调用(listview中每个item显示的内容,因为每一个item显示的具体内容是不一样的)。
2CursorAdapter的使用场景。安卓中设计了多种适配模式,可以让我们更加灵活的使用。CursorAdapter的设计,特别适合我们对数据库中进行操作。
示例:通过内容解析者得到手机联系人
package com.example.demo_contact;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v4.widget.CursorAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private MyAdapter adapter;
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
// 从内容解析者中得到一个cursor,对cursor进行遍历得到联系人;
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
null, null);
adapter = new MyAdapter(MainActivity.this, cursor);
listview.setAdapter(adapter);
}
private class MyAdapter extends CursorAdapter {
public MyAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
// TODO Auto-generated method stub
int i = 0;
ViewHolder holder = new ViewHolder();
View view = View.inflate(MainActivity.this, R.layout.item, null);
holder.name = (TextView) view.findViewById(R.id.name);
holder.phone = (TextView) view.findViewById(R.id.phone);
view.setTag(holder);
System.out.println("new view++++++++++++++++");
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
ViewHolder holder = (ViewHolder) view.getTag();
String name = cursor
.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phone = cursor
.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
holder.name.setText(name);
holder.phone.setText(phone);
System.out.println("bind view---------------");
}
}
private static class ViewHolder {
TextView name;
TextView phone;
}
}
主界面布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</RelativeLayout>
item布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/name"
android:layout_width="80dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:gravity="center_vertical"
android:text="name"
android:textSize="16dp" />
<TextView
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginLeft="40dp"
android:gravity="center_vertical"
android:text="phone"
android:textSize="16dp" />
</LinearLayout>