关于获取手机通讯录小结

关于获取手机通讯录小结

 

1.     获取手机通讯录信息

a.获取手机通讯录

Cursorcursor = context.getContentResolver().query(Phone.CONTENT_URI,null,null,null,null);

àpublic abstractContentResolvergetContentResolver()

Return aContentResolver instance for your application's package.

 

->ContentResolver

This classprovides applications access to the content model

这个类提供申请访问content模型


->Cursor

Thisinterface provides random read-write access to the result set returned by adatabase query

接口提供了随机读写访问数据查询结果集.

 

->public final Cursorquery(Uri uri,String[] projection, String selection, String[] selectionArgs, StringsortOrder)

Query the given URI, returning a Cursor over the result set.

 

b.获取联系人和号码

phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
phomeName = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));
 

c.添加手机通讯录权限

<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
 
此处注意
如果targetSdkVersion >= 23 ,则需要动态申请权限,
参考http://blog.csdn.net/u011200604/article/details/52874599
如果不打算动态申请权限,targetSdkVersion 最大只能设置22

 

2.     手机通讯录信息的封装

a.     创建一个类添加 name 和 number字段

b.     实现set和get方法

c.     封装

//创建 一个集合
public static List<PhoneInfo> lists = new ArrayList<PhoneInfo>();
PhoneInfo phoneInfo = new PhoneInfo(phomeName, phoneNumber);
lists.add(phoneInfo);
 

 

3.     手机通讯录UI的适配

a.ListView 控件需要传递adapter,自定义adapter继承自BaseAdapter 复写四个方法

getCount()
getItem(int i)
getItemId(int i)
getView(int i, View view, ViewGroup viewGroup)

 

b.实现xml布局

 

c.完成getView方法(实际上是参照4来写)

//获取当前加载的view
获取加载view的权限
        LayoutInflater inflater = LayoutInflater.from(mContext);
通过Layout 对象进项加载
        mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.cell, null);
        TextView name = (TextView) mRelativeLayout.findViewById(R.id.name);
        TextView number = (TextView) mRelativeLayout.findViewById(R.id.number);
将获取的内容添加进来
        name.setText(lists.get(i).getName());
        number.setText(lists.get(i).getNumber());

d.     在主函数中添加adapter

//        实例化Adapter
        adapter = new MyAdapter(GetNumber.lists,this);
//        绑定
        lv.setAdapter(adapter);

 

4.     Android中ListView的优化

 

a.通过ViewHolder进行优化,创建一个静态的ViewHolder类,包括name 和number两个TextView。

 

b.在getView 中通过ViewHolder加载两个TextView对象

 

c. public void setTag(Object tag)

Added inAPI level 1

Sets the tag associated with this view. A tag can be usedto mark a view in its hierarchy and does not have to be unique within thehierarchy. Tags can also be used to store data within a view without resortingto another data structure.

view.setTag(holder);//储存标签

holder = (ViewHolder)view.getTag();//不在重新加载view,获取之前存储的view即可

 

 

@Override
    public View getView(int i, View view, ViewGroup viewGroup) {
/*        //获取当前加载的view

//        获取加载view的权限
        LayoutInflater inflater = LayoutInflater.from(mContext);

//       通过 mLinearLayout 对对象进项加载
        mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.cell, null);
        TextView name = (TextView) mRelativeLayout.findViewById(R.id.name);
        TextView number = (TextView) mRelativeLayout.findViewById(R.id.number);

//        将获取的内容添加进来 
        name.setText(lists.get(i).getName());
        number.setText(lists.get(i).getNumber());*/

        ViewHolder holder;
        if (view == null) {
            view = LayoutInflater.from(mContext).inflate(R.layout.cell, null);
            holder = new ViewHolder();
            holder.name = (TextView) view.findViewById(R.id.name);
            holder.number = (TextView) view.findViewById(R.id.number);
            holder.name.setText(lists.get(i).getName());
            holder.number.setText(lists.get(i).getNumber());
            view.setTag(holder);//储存标签
        } else {

            holder = (ViewHolder) view.getTag();//不在重新加载view,获取之前存储的view即可
            holder.name.setText(lists.get(i).getName());
            holder.number.setText(lists.get(i).getNumber());
        }
        return view;
    }

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值