Android 通信录

Android 通信录

简单的实现了一个Android通信录
1 获取系统的联系人与电话号码html

public class GetNumber {
    //建立一个集合,类型为咱们封装的数据的类型PhoenInfo
    public static  List<PhoenInfo> lists = new ArrayList<PhoenInfo>();

    public static String getNumber(Context context) {
        //获取手机通信录,通信录在手机里面是经过数据库储存的,系统向外公布一个接口供查询
        //由于存在数据库里面,因此返回的是一个Cursor类型
        Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
        //获取到数据以后,经过循环将数据一一打印出来
        //建立一个对象来存储电话号码和联系人
        String phoneNumber;
        String phoneName;
        while (cursor.moveToNext()) {
            //获取number字段
            phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
            //获取联系人
            phoneName = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));
            //建立一个PhoneInfo的对象
            PhoenInfo phoenInfo=new PhoenInfo(phoneName,phoneNumber);
            //再把这些数据放到集合当中去
            lists.add(phoenInfo);
        }
        return null;
    }

2 将获取的数据封装起来 


public class PhoenInfo {
    private String name;
    private String number;
    //建立一个构造方法,由于number有地区+86的状况
    public PhoenInfo(String name, String number) {
        setName(name);
        setNumber(number);
    }

    public String getNumber() {
        return number;
    }

    public String getName() {
        return name;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3 创建适配器与ListView绑定java

public class MyAdapter extends BaseAdapter {
    //自定义的Adapter所须要的参数有两个:一个具体的内容也就是集合List,第二个是咱们须要承接上下文
    private List<PhoenInfo> lists;
    private Context context;
    //声明一个布局文件
    private LinearLayout layout;


    //下面建立一个构造方法,在里面进行传递参数
    public MyAdapter(List<PhoenInfo> lists, Context context) {
        this.lists = lists;
        this.context = context;
    }

    @Override
    public int getCount() {
        return lists.size();//返回的是集合的数量
    }

    @Override
    public Object getItem(int position) {
        return lists.get(position);//返回咱们当前的这条数据:lists.get(position)获取当前的数据
    }

    @Override
    public long getItemId(int position) {
        return position;//返回当前的ID,ID与position是相等的
    }

    //这个方法里面最重要的是咱们必需要获取到当前要加载的View,同时把内容加载到视图当中。在获取以前,
    // 咱们要建立一个子View,也就是Listview当中每一条数据显示的格式
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
// //获取加载view的权限
// LayoutInflater inflater = LayoutInflater.from(context);
// //经过layout对象来进行加载
// layout = (LinearLayout) inflater.inflate(R.layout.call, null);
// //声明两个TextView
// TextView namwtv = (TextView) layout.findViewById(R.id.tv_name);
// TextView numberTv = (TextView) layout.findViewById(R.id.tv_number);
// //把内容添加进去,里面的内容确定是经过集合来进行获取
// namwtv.setText(lists.get(position).getName());
// numberTv.setText(lists.get(position).getNumber());


        //建立ViewHolder对象
        ViewHolder holder;
        if (convertView == null) {
            //若是等于空说明本没有加载View,咱们就要加载一个VIew
            convertView = LayoutInflater.from(context).inflate(R.layout.call, null);
            //要想经过ViewHolder加载两个TextView,要对ViewHolder进行实例化
            holder = new ViewHolder();
            //接着经过ViewHolder对象来找到两个TextView
            holder.nametv = (TextView) convertView.findViewById(R.id.tv_name);
            holder.numbertv = (TextView) convertView.findViewById(R.id.tv_number);
            //加载内容
            holder.nametv.setText(lists.get(position).getName());
            holder.numbertv.setText(lists.get(position).getNumber());
            //第一次加载完毕,要用setTag存储一下
            convertView.setTag(holder);
        } else {
            //而后去加载内容
            holder = (ViewHolder) convertView.getTag();
            holder.nametv.setText(lists.get(position).getName());
            holder.numbertv.setText(lists.get(position).getNumber());
        }
        return convertView;
    }

    //对listView进行优化
    private static class ViewHolder {
        //承载两条内容
        TextView nametv;
        TextView numbertv;
    }
}



4 MainActivity


public class MainActivity extends AppCompatActivity {
private ListView listView;
    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GetNumber.getNumber(this);//调用一些GetNumber的类
        listView= (ListView) findViewById(R.id.lv);
        //实例化Adapter,GetNumber.lists当中的list是静态的,能够直接使用
        adapter=new MyAdapter(GetNumber.lists,this);
        //绑定
        listView.setAdapter(adapter);
    }
}

5 不要忘记加权限android

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
posted @ 2016-06-08 22:51 Newman·Li 阅读( ...) 评论( ...) 编辑 收藏