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

一、效果图


选择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() {     
	          
	@Override
	public 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值