Android程序:获取手机通讯录并用优化后的listview显示

来源:互联网 发布:中文linux操作系统 编辑:程序博客网 时间:2024/05/17 08:53

实现效果

手机信息类

public class PhoneInfo {    private String name;    private String number;    public PhoneInfo(String name, String number) {        setName(name);        setNumber(number);    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getNumber() {        return number;    }    public void setNumber(String number) {        this.number = number;    }}

获取联系人姓名和号码的方法类

public class GetNumber {    public static List<PhoneInfo> lists=new ArrayList<PhoneInfo>();    public static String getNumber(Context context){        Cursor cursor=context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);        String phoneNum;        String phoneName;        while (cursor.moveToNext()) {            //获取号码并去除空格            phoneNum=(cursor.getString(cursor.getColumnIndex(Phone.NUMBER))).replaceAll("\\s*", "");            //去除号码中+86前缀            if(phoneNum.substring(0, 3).equals("+86")){                phoneNum=phoneNum.substring(3);            }            phoneName=cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));            PhoneInfo phoneInfo=new PhoneInfo(phoneName, phoneNum);            lists.add(phoneInfo);        }        return null;    }}

自定义适配器MyAdapter

public class MyAdapter extends BaseAdapter {    private List<PhoneInfo> lists;    private Context context;    public MyAdapter(List<PhoneInfo> lists, Context context) {        super();        this.lists = lists;        this.context = context;    }    @Override    public int getCount() {        return lists.size();    }    @Override    public Object getItem(int position) {        return lists.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {//      未优化的代码//      LayoutInflater inflater=LayoutInflater.from(context);//      layout=(LinearLayout) inflater.inflate(R.layout.call, null);//      TextView nametv=(TextView) layout.findViewById(R.id.name);//      TextView numbertv=(TextView) layout.findViewById(R.id.number);//      nametv.setText(lists.get(position).getName());//      numbertv.setText(lists.get(position).getNumber());        //优化后的listview        ViewHolder holder;        if(convertView==null){            convertView=LayoutInflater.from(context).inflate(R.layout.call, null);            holder=new ViewHolder();            holder.nametv=(TextView) convertView.findViewById(R.id.name);            holder.numbertv=(TextView) convertView.findViewById(R.id.number);            holder.nametv.setText(lists.get(position).getName());            holder.numbertv.setText(lists.get(position).getNumber());            convertView.setTag(holder);        }else {            holder=(ViewHolder) convertView.getTag();            holder.nametv.setText(lists.get(position).getName());            holder.numbertv.setText(lists.get(position).getNumber());        }        return convertView;    }    private static class ViewHolder{        TextView nametv;        TextView numbertv;    }}

call.xml:list显示的样式

<?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" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <ImageView            android:id="@+id/imageView1"            android:layout_width="45dp"            android:layout_height="45dp"            android:src="@drawable/ic_launcher" />        <LinearLayout            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:gravity="center_vertical"            android:orientation="horizontal" >        <LinearLayout            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:orientation="vertical" >            <TextView                android:id="@+id/name"                android:textSize="15sp"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="TextView" />            <TextView                android:id="@+id/number"                android:textSize="10sp"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="TextView" />        </LinearLayout>    </LinearLayout>    </LinearLayout></LinearLayout>

MainActivity

public class MainActivity extends Activity {    private ListView lv;    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        GetNumber.getNumber(MainActivity.this);        lv=(ListView) findViewById(R.id.lv);        adapter=new MyAdapter(GetNumber.lists, this);        lv.setAdapter(adapter);    }}
0 0
原创粉丝点击