如何从联系人里加载列表(ListView)

来源:互联网 发布:中国的软件行业 编辑:程序博客网 时间:2024/04/30 10:23

一、效果图


选择listview一行后执行打电话操作



二、如何实现

1、从手机里读取联系人信息

 /**联系人名称**/
private ArrayList<String> mContactsName = new ArrayList<String>();                   /**联系人电话**/private ArrayList<String> mContactsNumber = new ArrayList<String>();               /**联系人头像**/private ArrayList<Bitmap> mContactsPhonto = new ArrayList<Bitmap>();      /**得到手机通讯录联系人信息**/private void getPhoneContacts() {     ContentResolver resolver = mContext.getContentResolver();               // 获取手机联系人             Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);                         if (phoneCursor != null) {         while (phoneCursor.moveToNext()) {                   //得到手机号码         String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);         //当手机号码为空的或者为空字段 跳过当前循环         if (TextUtils.isEmpty(phoneNumber))             continue;                           //得到联系人名称         String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);                           //得到联系人ID         Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);                   //得到联系人头像ID         Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);                           //得到联系人头像Bitamp         Bitmap contactPhoto = null;                   //photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的         if(photoid > 0 ) {             Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);             InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);             contactPhoto = BitmapFactory.decodeStream(input);         }else {             contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.defaoult);         }                           mContactsName.add(contactName);         mContactsNumber.add(phoneNumber);         mContactsPhonto.add(contactPhoto);         }               phoneCursor.close();
      }
}    

2、实现自定义BaseAdapter

 class MyListAdapter extends BaseAdapter {     
    public MyListAdapter(Context context) {             mContext = context;         }                   public int getCount() {             //设置绘制数量             return mContactsName.size();         }                   @Override    public boolean areAllItemsEnabled() {             return false;         }                   public Object getItem(int position) {             return position;         }                   public long getItemId(int position) {             return position;         }                   public View getView(int position, View convertView, ViewGroup parent) {             ImageView iamge = null;             TextView title = null;             TextView text = null;             if (convertView == null || position < mContactsNumber.size()) {             convertView = LayoutInflater.from(mContext).inflate(                 R.layout.list_item, null);             iamge = (ImageView) convertView.findViewById(R.id.item_image);             title = (TextView) convertView.findViewById(R.id.item_title);             text = (TextView) convertView.findViewById(R.id.item_text);             }             //绘制联系人名称             title.setText(mContactsName.get(position));             //绘制联系人号码             text.setText(mContactsNumber.get(position));             //绘制联系人头像             iamge.setImageBitmap(mContactsPhonto.get(position));             return convertView;        }     }     

3、list_item.xml 布局

<?xml version="1.0" encoding="utf-8"?>       

            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent" android:layout_height="wrap_content">           <ImageView         android:id="@+id/item_image"          android:layout_width="40dip"         android:layout_height="40dip" />           <TextView         android:id="@+id/item_title"          android:layout_width="fill_parent"         android:layout_height="wrap_content"          android:layout_toRightOf="@+id/item_image"          android:singleLine="true"          android:ellipsize="marquee"           android:textSize="15dip"  />           <TextView         android:id="@+id/item_text"          android:layout_width="fill_parent"         android:layout_height="wrap_content"          android:layout_toRightOf="@+id/item_image"          android:layout_below="@+id/item_title"            android:singleLine="true"          android:ellipsize="marquee"           android:textSize="20dip" />       </RelativeLayout>

3、监听列表事件,当选中一行,给该联系人打电话

mListView.setOnItemClickListener(new OnItemClickListener() {               @Overridepublic void onItemClick(AdapterView<?> adapterView, View view,         int position, long id) {     //调用系统方法拨打电话     Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri         .parse("tel:" + mContactsNumber.get(position)));     startActivity(dialIntent);     }   
});  

源码地址:http://download.csdn.net/detail/m370809968/6500709