上一博客说到如何取系统的通讯录,取出系统通信录后我们该用怎么样的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);
}