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

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

 

程序的目地是在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

阅读更多
个人分类: android
上一篇NotificationManager和Notification的使用总结
下一篇android 单位
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭