CursorAdapter的使用:获取手机联系人

来源:互联网 发布:手机打印软件惠普 编辑:程序博客网 时间:2024/05/21 15:50

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>

运行结果:

这里写图片描述

在控件台中打印的Log:

这里写图片描述

根据打印的结果可以看出,bindView每一次都会执行,而newView如果没有复用的item,则会创建一个,如果有的话就不会重新创建。

2 0
原创粉丝点击