获取手机通讯录-----1.2(取出通讯录数据,用ListView)显示

              上一博客说到如何取系统的通讯录,取出系统通信录后我们该用怎么样的UI界面来给用户显示呢?下面就来记记,方便以后查阅。

               我们先看一下效果图:

             

      1、 首先我们从xml布局入手(activity_homedialg_calllog_list_item.xml),drawable下面一些图标、背景色我就不贴出来了。


   

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/linearlayout_select"
    android:orientation="vertical" >
    
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
         >
		<RelativeLayout 
		    android:id="@+id/calllog_item_left_id"
		    android:layout_width="wrap_content"
		    android:layout_height="wrap_content"
		    android:layout_marginRight="50dp"
		    android:background="@drawable/linearlayout_select"
		    android:clickable="true"
		    >
		    
		    <TextView 
		        android:id="@+id/calllog_item_textview_name"
		        android:layout_width="wrap_content" 
		        android:layout_height="wrap_content"
		        android:layout_marginLeft="15dp"
		        android:textSize="17sp"
		        android:layout_marginTop="5dp"
		        android:textColor="@color/black"
		        android:text="@string/calllog_item_name"
		        />
		    
		    <ImageView 
		        android:id="@+id/calllog_item_imageview_laidian"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:layout_marginTop="43dp"
		        android:layout_marginLeft="15dp"
		        android:background="@drawable/yijie"
		        />
		    
		    <TextView 
		        android:id="@+id/callog_item_textview_location"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:layout_marginLeft="60dp"
		        android:layout_marginTop="40dp"
		        android:textSize="13sp"
		        android:textColor="@color/gray"
		        android:text="@string/calllog_item_location"
		        />
		   
		    <ImageView 
		        android:id="@+id/callog_item_imageview_fg"
		        android:layout_width="1dp"
		        android:layout_height="wrap_content"
		        android:layout_alignParentRight="true"
		        android:layout_centerVertical="true"
		        android:background="@drawable/zhufg"
		        />
		    
		     <TextView 
		        android:id="@+id/calllog_item_textview_time"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:layout_marginTop="40dp"
		        android:layout_marginLeft="10dp"
		        android:text="@string/clllog_item_time"
		        android:textSize="13sp"
                android:textColor="@color/gray"
		        android:layout_toLeftOf="@id/callog_item_imageview_fg"
		        />
		</RelativeLayout>
        <ImageButton 
            android:id="@+id/call_btn"
            android:layout_width="50dp"
            android:layout_height="60dp"
            android:layout_alignParentRight="true"
            android:background="@drawable/linearlayout_select"
            android:padding="5dp"
            android:src="@drawable/zhibo"
            />
		
	</RelativeLayout>
</LinearLayout>

2、Adapter继承BaseAdapter,构造方法把封装的CallLogBean集合传进来。

 

public class HomeDialgAdapter extends BaseAdapter {

	private Context context;
	private List<CallLagBean> list;
	private LayoutInflater inflater;
	private ViewOnclickCallBack viewOnclickCallBack;
	
	public HomeDialgAdapter(Context context,List<CallLagBean> list) {
		// TODO Auto-generated constructor stub
			this.context = context;
			this.list = list;
			this.inflater =LayoutInflater.from(context);
	}
	
	/**
	 * 设置侦听
	 * @param clickLitener
	 */
	public void setViewClickListener(ViewOnclickCallBack clickLitener){
		this.viewOnclickCallBack = clickLitener;		
	}
	
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();		
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
			ViewHolder viewHolder;
			if(convertView == null){
				convertView = inflater.inflate(R.layout.activity_homedialg_calllog_list_item, null);
				viewHolder = new ViewHolder();
				viewHolder.left_View = convertView.findViewById(R.id.calllog_item_left_id);
				viewHolder.callLog_item_phoneLocal = (TextView) convertView.findViewById(R.id.callog_item_textview_location);
				viewHolder.callLog_item_name = (TextView) convertView.findViewById(R.id.calllog_item_textview_name);
				viewHolder.callLog_item_callType = (ImageView) convertView.findViewById(R.id.calllog_item_imageview_laidian);
				viewHolder.callLog_item_time = (TextView) convertView.findViewById(R.id.calllog_item_textview_time);
				viewHolder.callLog_item_call_btn = (ImageView) convertView.findViewById(R.id.call_btn);
				convertView.setTag(viewHolder);
			}else{
				viewHolder =(ViewHolder) convertView.getTag();
			}
			CallLagBean callLagBean = list.get(position);
			//根据电话类型(来电、已接、未接)分别设置不同的图标
			switch (callLagBean.getType()) {
			case 1:
				viewHolder.callLog_item_callType.setBackgroundResource(R.drawable.yijie);
				break;
			case 2:
				viewHolder.callLog_item_callType.setBackgroundResource(R.drawable.yibo);
				break;
			case 3:
				viewHolder.callLog_item_callType.setBackgroundResource(R.drawable.weijie);
				break;				
			}
			
			//如果是未接来电号码显示为红色
			if(callLagBean.getType() == 3){
				viewHolder.callLog_item_name.setTextColor(Color.RED);
			}else{
				viewHolder.callLog_item_name.setTextColor(Color.BLACK);
			}
			
			String name = callLagBean.getName();
			try{
				int parseInt = Integer.parseInt(name);
				if(parseInt < 0){
					name = "私人号码";
				}
			}catch(Exception e){
				e.printStackTrace();
			}
			
			viewHolder.callLog_item_name.setText(name+"(" +callLagBean.getCount()+ ")");
			viewHolder.callLog_item_time.setText(callLagBean.getDate());
			addViewListener(viewHolder.left_View,callLagBean,position);
			String phoneLocal = callLagBean.getPhonelocal();
			addViewListener(viewHolder.callLog_item_call_btn,callLagBean, position);
			if(phoneLocal != null){
				viewHolder.callLog_item_phoneLocal.setText(phoneLocal);
			}else{
				viewHolder.callLog_item_phoneLocal.setText("");
			}
		return convertView;
	}

	private static class ViewHolder {
		TextView   callLog_item_name;          //电话薄姓名
		ImageView  callLog_item_callType;	//来电、未接图标
		TextView   callLog_item_phoneLocal;	//归属地
		ImageView  callLog_item_call_btn;      //最右边拨打电话按钮
		TextView   callLog_item_time;	      //显示时间
		View       left_View;			//
	}
	
	private void addViewListener(final View view,final CallLagBean callLagBean,final int position){
		view.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				if(viewOnclickCallBack != null){
					viewOnclickCallBack.clicked(view, callLagBean, position);
				}
			}
		});
	}
}

3、在上一篇博客1.1中的ListView      new HomeDialgAdapter 并setAdapter

  

	private HomeDialgAdapter adapter;

        public void setAdapter(List<CallLagBean> list) {
		// TODO Auto-generated method stub
		adapter = new HomeDialgAdapter(this, list);
		homeDial_ListView_call.setAdapter(adapter);
	}
     在MyAsyncQueryHandler内部类中插入:

   

                     System.out.println("==========>通话记录整理完毕");
			if(callBeanList.size() > 0){
				setAdapter(callBeanList);
			}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值