关闭

关于使用AutoCompleteTextView和CursorAdapter查询电话联系人并找出电话号码

标签: 电话dropdownandroidnullservicepermissions
1654人阅读 评论(1) 收藏 举报
分类:

学习到这部分遇见很多的问题,看了很多人讲的关于这部分的文章同时结合自己的测试总结如下:

 

程序的目地是在AutoCompleteTextView里面输入联系人名同时自动找出建议的联系人,选取某个联系人后得到该联系人的电话号码。

这里关键是实现一个自己的XXXXXAdapter 继承自CursorAdapter。

要继承CursorAdapter类。必须实现(Override)的方法有:

      一  先实现 public Cursor runQueryOnBackgroundThread(CharSequence constraint)

      其中constraint就是输入的要查询的关键字,注意当选中输入框的时候,此方法就会被调用,此时constraint = null 如处理不当运行时会报错

这里的返回值Cursor.并将提供给方法public View  newView( , ,)使用;

      二  然后实现方法public View newView(Context context, Cursor cursor, ViewGroup parent),cursor是上一个方法产生的.这个方法里面需要构造一个在dropdown里显示的view(我把这个view理解为例表中每行显示内容的一个模型,这里可以通过LayoutInflater构造出需要的样式)。这个view作为返回值在bindView( )中还会用到。

      三  再是实现方法public void bindView(View view, Context context, Cursor cursor) 。view就是第二步产生的。cursor是第一步产生的。这里就是把corsor里的数据绑定到view中对应的元素中去。注意此方法会多次频繁调用,所以不要有耗时的操作,不然会卡。

      四   最后是 public CharSequence convertToString(Cursor cursor) 此方法是在我们选择某个联系人后会显示在AutoCompleteTextView中的内容。

 

        AutoCompleteTextView在布局文件中 

                              android:completionThreshold="1"  表示输入1个字符就显示出建议的联系人

                              android:completionHint="@string/strHint"  表示在建议例表最后显示的一句话,比如“输入*号给出全部联系人“

 

 

         以上就是对CursorAdapter的实现。其中的newView()方法很是让我郁闷了很久, 网上找了很久才大概了解了LayoutInflater的主要目地就是把一个布局文件导入到代码中来,下面//线的几行是不同的使用方法。

我的方法是自己写了个ex05_09_cursoradapterview.xml  ,里面就是很简单的左边一个TextView显示联系人名,右边一个ImageView用于显示一个小图标。关于这部分网上很多查查就有了。

android.R.layout.simple_dropdown_item_1line

位置:mydroid/frameworks/base/core/res/res/layout/simple_dropdown_item_1line.xml

 

 

最后还有程序中使用ContactsContract,我看的书写的是Contacts,似乎是2.0后这个就不建议使用了。这里还有个查找联系人后如何找到属于此人的全部电话号码的问题。

这里提供一个链接 http://hi.baidu.com/wudaovip/blog/item/d7f166df13a8241c495403e7.html

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16183次
    • 积分:231
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:10篇
    • 译文:0篇
    • 评论:3条
    文章分类
    文章存档
    最新评论