android中联系人搜索框

【Android】仿微信通讯录中的右侧字母表控件 微信通讯录中的右侧有个字母条,通过它可以快速找到 阅读详情

在开发中经常用到获取联系人和搜索框,今天总结一下。

代码很多借鉴于:http://blog.youkuaiyun.com/wyzxk888/article/details/8800407
在些基础上做了修改,代码做了适量封装,能够直接适用于项目中。

运行效果图:

这里写图片描述这里写图片描述这里写图片描述


代码目录结构:
![这里写图片描述](https://img-blog.youkuaiyun.com/20151130230330020

1、在Activity中做调用,得到联系人,对EditText设置监听。

public class MainActivity extends Activity implements TextWatcher {
    private ListAdapter adapter;
    private ArrayList<Person> list;
    private EditText searchbox;
    private ListView listview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        searchbox = (EditText) findViewById(R.id.searchbox);
        listview = (ListView) findViewById(R.id.listview);
        list = new ArrayList<Person>();
        // Person p1 = new Person("于小刚", "13525568711");
        // Person p2 = new Person("张三", "13500001234");
        // Person p3 = new Person("小张", "13800001234");
        // Person p4 = new Person("李四", "13600001111");
        // Person p5 = new Person("abc", "17900001112");
        // Person p6 = new Person("abcd", "17900001113");
        // Person p7 = new Person("小王", "17900001114");
        // list.add(p1);
        // list.add(p2);
        // list.add(p3);
        // list.add(p4);
        // list.add(p5);
        // list.add(p6);
        // list.add(p7);
        //adapter = new ListAdapter(list, this);

        PhoneUtils.getNumber(this);
        //得到联系人;
        adapter = new ListAdapter(PhoneUtils.list, this);
        //设置给adapter;
        listview.setAdapter(adapter);
        //给EditText设置监听;
        searchbox.addTextChangedListener(this);
    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int before,
            int arg3) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
        adapter.getFilter().filter(s); // 当数据改变时,调用过滤器;
    }
}

2、在adapter设置数据,并且得到EditText的监听,改变listview;

public class ListAdapter extends BaseAdapter implements Filterable {  

    private List<Person> list;  

    private Context context;  

    private PersonFilter filter;  

    public ListAdapter(List<Person> list, Context context) {  
        this.list = list;  
        this.context = context;  
    }  

    @Override  
    public int getCount() {  
        return list.size();  
    }  

    @Override  
    public Object getItem(int position) {  
        return list.get(position);  
    }  

    @Override  
    public long getItemId(int position) {  
        return position;  
    }  

    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        if (convertView == null) {  
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null);  
        }  
        Person p = list.get(position);  
        TextView name = (TextView)convertView.findViewById(R.id.name);  

        TextView number = (TextView)convertView.findViewById(R.id.number);  

        name.setText(p.name);  
        number.setText(p.number + "");  
        return convertView;  
    }  

    @Override  
    public android.widget.Filter getFilter() {  
        if (filter == null) {  
            filter = new PersonFilter(list);  
        }  
        return filter;  
    }  

    private class PersonFilter extends  android.widget.Filter {  

        private List<Person> original;  

        public PersonFilter(List<Person> list) {  
            this.original = list;  
        }  

        @Override  
        protected FilterResults performFiltering(CharSequence constraint) {  
            FilterResults results = new FilterResults();  
            if (constraint == null || constraint.length() == 0) {  
                results.values = original;  
                results.count = original.size();  
            } else {  
                List<Person> mList = new ArrayList<Person>();  
                for (Person p: original) {  
                    if (p.name.toUpperCase().startsWith(constraint.toString().toUpperCase())   
                        || new String(p.number + "").toUpperCase().startsWith(constraint.toString().toUpperCase())) {  
                        mList.add(p);  
                    }  
                }  
                results.values = mList;  
                results.count = mList.size();  
            }  
            return results;  
        }  

        @Override  
        protected void publishResults(CharSequence constraint,  
                FilterResults results) {  
            list = (List<Person>)results.values;  
            notifyDataSetChanged();  
        }  

    }


}  

3、bean类,比较简单。

public class Person {  
    public String name;  
    public String number;  

    public Person(String firtname, String number) {  
        this.name = firtname;  
        this.number =number; 
    }

}  

4、获取联系人的工具类:


public class PhoneUtils {
    // 获得手机上的联系人,并保存入集合;
    public static List<Person> list = new ArrayList<Person>();

    public static String getNumber(Context context) {
        Cursor cursor = context.getContentResolver().query(
                CommonDataKinds.Phone.CONTENT_URI, null, null, null,
                "sort_key asc");
        String phoneNumber;
        String phoneName;
        while (cursor.moveToNext()) {
            phoneNumber = cursor.getString(cursor
                    .getColumnIndex(CommonDataKinds.Phone.NUMBER));
            phoneName = cursor.getString(cursor
                    .getColumnIndex(CommonDataKinds.Phone.DISPLAY_NAME));
            Person phoneInfo = new Person(phoneName, phoneNumber);
            list.add(phoneInfo);
            Log.i("GetPhoneNumber", phoneName + "------" + phoneNumber);
        }
        cursor.close();
        return null;
    }
}

这样就实现了显示联系人并且带有搜索框的功能;
代码下载地址:http://download.youkuaiyun.com/detail/androidxiaogang/9314065

CD55MAX智能手表双系统与摩斯密码防检查模式深度解析 在智能穿戴设备领域,隐私保护与系统定制化是用户关注的核心技术需求。其实现原理通常基于应用隔离与快速情境切换机制,通过在逻辑层面构建独立的隐私空间,实现对特定应用与数据的隐藏。这种设计为设备带来了高度的自主性与灵活性,尤其适用于需要平衡合规使用与个人隐私的场景,例如校园集体生活。CD55MAX智能手表正是基于这一理念,创新性地引入了“双系统”架构与“摩斯密码防检查模式”,前者通过双桌面环境实现应用与数据的逻辑隔离,后者则利用自定义手势实现模式的快速切换,以应对突发检查。本文将从技术实现、设置流程、应用安装及风 阅读详情

相关推荐

android 通讯录(A-Z)带可模糊查询搜索框

详情:http://blog.youkuaiyun.com/qq_17299423/article/details/51490686

Android通过搜索框架实现搜索功能

Android 搜索框架提供了搜索弹窗和搜索控件两种使用方式。搜索弹窗:系统控制的弹窗,激活后显示在页面顶部,输入的内容提交后会通过Intent传递到指定的搜索Activity中处理,可以添加搜索建议。搜索控件(SearchView):系统实现的搜索控件,可以放在任意位置(可以与Toolbar结合使用),默认情况下与EditText类似,需要自己添加监听处理用户输入的数据,通过配置可以达到与搜索弹窗一致的行为。

m0_56144365的博客 3454

android联系人搜索框

android联系得到联系人,并且设置搜索框,使用比较简单。

android通讯录搜索功能,Android实现可浏览和搜索的联系人列表

通过这篇文章,我想说明一下如何创建一个可搜索的“联系人列表”Android应用程序。使用这个应用程序,用户可以通过使用导航按钮浏览所有保存的联系人和根据联系人名称搜索联系人。该应用程序还可以显示联系人的照片(如果可用)。要浏览联系人列表可以使用<和>>按钮。要搜索联系人的用户在“搜索名称”文本框中键入联系人名称,然后单击“搜索”按钮。点击“清除搜索”按钮,清除“搜索名称”文本框中...

weixin_31936127的博客 1784

联系人搜索框

仿通讯录联系人搜索框搜索效果

Android实现通讯录(带有拼音首字母排序的和过滤搜索

ListView实现A-Z字母排序和过滤搜索功能并且实现汉字转成拼音的功能,获取通讯录联系人和头像

android通讯录搜索,通过输入框搜索以及侧边litview的滚动搜索,还有单选,全选以及反选的功能

由于项目需要做一个仿通讯录搜索联系人的功能,并且需要选中联系人,即推荐好友的功能。所以就想写一遍blog来介绍它是怎么实现,以及是怎么用的。好的,接下来,让我为大家讲解一下它是怎么生出来的。 首先,给大家上一个功能示例图。 以上四张图片是通过本人截图所得的,虽然不是很好看,但大概意思应该都能明白。大致有3个分类功能:一是输入框搜索,二是侧边栏搜索,三是联系人的单选,全选以及反选功能。那下面,我

huangf321123的博客 1341

android实现读取、搜索联系人的代码

代码很简单,就不多废话了 代码如下: //读取联系人 public static Uri CONTACTSURI = ContactsContract.Contacts.CONTENT_URI;//联系人     public static void getContactsInfo(Context context,String tag){         String[] projections = new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME};         Curso

Android通讯录搜索

使用ContentResolver       在使用Google网页搜索功能时,只要输入几个字,就会在下方出现很多建议关键字。这次的范例,将以手机里的通讯录作为查询对象,并设计出一个类似建议的可能联系人。要使用类似建议完成功能的AutoCompleteViewWidget,以及示范如何使用ContentResolver来访问通讯录里联系人的关键字,并将所有找到的联系人存入CursorAd

sosohotsummer的专栏 1482

SuperPoint与SuperGlue的C++ TensorRT工程化实战:从理论到部署的完整指南

本文详细介绍了如何将SuperPoint和SuperGlue算法通过C++和TensorRT进行工程化部署,从模型准备、格式转换到TensorRT引擎构建和C++推理实现。通过性能优化技巧和实际应用案例,展示了在边缘设备上实现实时特征匹配的完整流程,显著提升处理速度与效率。

weixin_42537831的博客 160

ros1 Noetic下运行cartographer算法进行2d建图

最近的工作重点放在机器狗的二次开发上,项目的需求是要升级机器狗的slam算法和导航避障算法,slam拟采用激光与视觉融合算法,激光slam就使用最为流行和实用的cartoghper算法。在这过程中遇到好多坑,希望看到这篇博客的人能少走弯路吧。我用的仿真机器人是wpr_simiulation。首先复制一份demo_revo_lds.launch文件和revo_lds.lua文件,修改成下面的样子。my_test.lua文件,base_link就是机器人的坐标系。下载与安装的博客有很多,我推荐。

sun5739的博客 1547

Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框

作者:泥沙砖瓦浆木匠网站:http://blog.youkuaiyun.com/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。交流QQ群:【编程之美 365234583】http://jq.qq.com/?_wv=1027&amp;k=XVfBTo 要捐钱的就打支付宝吧:13958686678(泥瓦匠开个玩笑~) 一、前言     继续AndroidUI系列,泥瓦匠又要...

weixin_34032779的博客 193

Hive数据仓库分层架构实战:4层黄金模型×6大业务场景×万亿级数据优化方案

根据《2023数据中台成熟度报告》,‌78%的ETL任务性能瓶颈‌源于分层设计不合理。本文基于某头部电商平台PB级数据仓库建设经验,结合金融风控、用户画像、实时大屏等核心场景,深度解析‌ODS→DWD→DWS→ADS‌四层架构设计原则,揭秘‌万亿级数据治理方案‌与‌维度建模20大避坑策略‌。

优快云博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 1483

android布局新建联系人,Android中设置搜素联系人的布局

我们现在要达到下面的效果:我们这样做了:我们可以先定义一个线性布局:在线性布局中加入一个ImageView和一个Edittext最后给这个线性布局加入背景,该背景就是外面的一个灰色边框。我们来看看代码:android:id="@+id/RelativeLayout1"android:layout_width="250dp"android:layout_height="40dp"android:la...

weixin_35411561的博客 220

从零实战:基于华中8型数控系统的CNC数据采集与二次开发

本文详细介绍了基于华中8型数控系统的CNC数据采集与二次开发实战指南。从开发环境准备到核心数据采集实现,涵盖Windows平台配置、实时数据采集、报警处理等关键技术,帮助开发者快速掌握华中数控系统的数据采集能力,提升智能制造水平。

weixin_42561143的博客 812

Android投屏开发实战:手把手教你用Miracast实现Sink端功能(附完整代码)

本文是一份Android投屏Sink端开发的实战指南,详细讲解了如何利用Miracast协议和Wi-Fi P2P技术,从零构建一个功能完整的屏幕接收器。内容涵盖环境搭建、通过反射启用WFD Sink模式、RTSP协议协商、RTP流接收与解析,以及最终使用IjkPlayer进行音视频解码播放的全过程,并附有核心代码示例。

cherry的博客 878

Android仿微信添加联系人列表,内附有截图和demo源码

分享一个Android仿微信选择联系人页面 之前做的App主要是工具类的,而且公司的产品经理也喜欢在App里设计很多自定义控件,所以比一般市场上的App要麻烦一些,今天先介绍一个仿微信选择联系人的页面,涉及的功能较多 页面实现了哪些功能 将联系人名字首字母进行a-z排序,并且每一个字母都有一个头部,没有获取首字母的则放入#分类中,并且在a前面加入一个常用联系人展示 在列表右边有一列从 常、a-z...

y1010012836的博客 1万+

告别 DEFINE VIEW:CDS View Entity 迁移全景实战(报表迁移 + ADT 向导 + 避坑清单)

CDS迁移的关键要点与策略 CDS DDIC-based View已被标记为废弃,迁移到CDS View Entity成为必要。迁移面临的主要挑战包括激活成本、命名约束和依赖风险。ABAP 7.57及以上版本必须优先处理,否则将积累技术债务。 迁移方式主要有两种: 报表路线:适合渐进式迁移的On-Premise项目 ADT向导:适合云环境批量迁移 关键注意事项: 必须提前检查SQL View依赖关系 金额/数量字段需要显式引用单位/货币字段 建议按使用场景分批迁移 最佳实践是结合报表进行系统盘点,再通过AD

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 208

【Android】安卓开发实战之仿iPhone通讯录demo的移植和优化

demo下载地址:http://download.youkuaiyun.com/detail/u013895206/9273575 首先来看一下demo和我移植优化后的对比效果 demo: 优化后: 可以看到,针对demo,我做了移植后,主要做了一下优化: 1、优化键盘设置。 2、将顶部固定的搜索框折叠到了搜索图标中。 3、将Activity中的demo,移到了Fr

Hy的博客 1681

(3dnr)多帧视频图像去噪 (一)

视频图像去噪主要利用相邻帧间内容相似性,通过时域帧平均降低随机噪声。为避免运动物体产生"拖尾"现象,可采用运动自适应或运动补偿时域滤波方法。前者根据运动强度动态调整滤波系数,后者通过运动补偿使参考帧更接近当前帧。运动补偿方法虽能更好处理运动区域,但计算复杂度高且对快速运动场景效果有限。相比之下,运动自适应方法在实时视频处理中更具优势,能平衡去噪效果与硬件资源消耗。两种方法可根据场景动态切换以获得最佳去噪效果。

大熊 1868

深度学习论文: Towards Total Recall in Industrial Anomaly Detection

在大规模工业制造中,能够准确检测出有缺陷的零件至关重要。我们在这项工作中面临的一个特殊挑战是冷启动问题:仅使用正常的示例图像来训练模型。虽然可以针对每个类别手动设计解决方案,但我们的目标是构建能够自动适用于多个任务的系统。最佳的方法是将ImageNet模型的嵌入特征与异常检测模型结合起来。在本文中,我们在这一研究基础上进行了扩展,并提出了PatchCore,它利用了一个具有最大代表性的正常补丁特征内存库。通过这种方法,我们能够更好地解决冷启动问题,并提高系统在多任务上的性能。

mingo_敏 1875
上一篇: 百度地图总结
下一篇: android中的网络请求(以注册登陆为例)
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值