android学习笔记简单通讯录

来源:互联网 发布:淘宝vip钻石卡 编辑:程序博客网 时间:2024/06/05 17:07

设计思路:

一、UI设置

 1.主界面设置一个ListView

 2.在listView的子项定义一个自定义布局,里面存放有联系人头像,姓名,电话号码

二、逻辑:

1.获取手机通讯录信息

2.把获取的信息封装保存起来,可定义一个对象包含姓名,电话号码来进行封装

3.通讯录信息与UI的适配



一、设置UI  

activity_main.xml

<span style="font-family:Microsoft YaHei;font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.jikexueyuan.getmyphonenumber.MainActivity" >    <ListView        android:id="@+id/lv"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        >    </ListView></RelativeLayout></span>


cell.xml

<span style="font-family:Microsoft YaHei;font-size:14px;"><?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:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:textSize="15sp"                    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></span>


二、逻辑实现

1.获取手机通讯信息(GetNumberj.ava)

通讯录的信息存储在数据库中,使用context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null); 可以获得一个cursor实例,保存了通讯信息

把数据库里的号码,信息依次取出,存放在lists列表中

<span style="font-family:Microsoft YaHei;font-size:14px;">public class GetNumber {public static List<PhoneInfo> lists = new ArrayList<PhoneInfo>();   //PhoneInfo封装了通讯信息public static String getNumber(Context context){Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);String phoneNumber;String phoneName;while (cursor.moveToNext()) {phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));phoneName = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));PhoneInfo phoneInfo = new PhoneInfo(phoneName, phoneNumber);lists.add(phoneInfo);System.out.println(phoneName+phoneNumber);}return null;}</span>
2.封装类(PhoneInfo.java)

<span style="font-family:Microsoft YaHei;font-size:14px;">public class PhoneInfo {private String name;private String number;public PhoneInfo(String name,String number) {setNumber(number);setName(name);}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;}}</span>
3.通讯录信息与UI的适配(Myadapter.java)

构造方法传入lists里的数据与上下文

重点要重写getView方法

<span style="font-family:Microsoft YaHei;font-size:14px;">public class MyAdapter extends BaseAdapter{private List<PhoneInfo> lists;private Context context;private LinearLayout layout;public MyAdapter(List<PhoneInfo> lists,Context context) {this.lists = lists;this.context = context;}@Overridepublic int getCount() {return lists.size();}@Overridepublic Object getItem(int position) {return lists.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {<span style="white-space:pre"></span>//如果是第一次创建convertView = LayoutInflater.from(context).inflate(R.layout.cell, null);<span style="white-space:pre"></span>加载cell布局holder = new ViewHolder();<span style="white-space:pre"></span>holder.nametv = (TextView) convertView.findViewById(R.id.name);holder.numbertv = (TextView) convertView.findViewById(R.id.number);convertView.setTag(holder);<span style="white-space:pre"></span>//上面拿到控件实例,这里保存在converView中}else{holder = (ViewHolder) convertView.getTag();<span style="white-space:pre"></span>//直接getTag()拿到控件实例}holder.nametv.setText(lists.get(position).getName());holder.numbertv.setText(lists.get(position).getNumber());return convertView;}</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">private static class ViewHolder{<span style="white-space:pre"></span>//新建内部类,对控件的实例进行缓存TextView nametv;TextView numbertv;}}</span>

4.主MainActiviyu显示 (MainActivity.class)

<span style="font-family:Microsoft YaHei;font-size:14px;">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(this);        lv = (ListView) findViewById(R.id.lv);        adapter = new MyAdapter(GetNumber.lists, this);        lv.setAdapter(adapter);    }}</span>






0 0