首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓T9搜索联系人(智能拨号)

安卓T9搜索联系人(智能拨号)
EN

Stack Overflow用户
提问于 2016-11-07 03:16:39
回答 1查看 1.2K关注 0票数 1

我想实现T9搜索,就像android本地拨号或TrueCaller拨号一样。到目前为止,我取得的成就是:

将击键转换为字符串模式,例如如果我在拨号程序上按2,它会给我"abc“、"ac”、"ca“等等。

现在我问了一个问题

字符串选择=Utility.getSelectionLikeWithIn(Mmemonic);

游标查询= getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,空,选择,空,空);‘

公共静态字符串getSelectionLikeWithIn(列表mmemonics) {

代码语言:javascript
复制
    String selection = "";
    for (int i = 0; i < mmemonics.size(); i++) {
        selection = selection + " display_name LIKE '";
        selection = selection + mmemonics.get(i);

        if (i == mmemonics.size() - 1){
            selection = selection + "%'";


        }else {
            selection = selection + "%' OR";
        }
    }
    return selection;
}'

上面的方法将字符串的数组列表转换为where子句

display_name喜欢'ab%‘或者display_name喜欢'abc%’等等.

这给了我由于复杂的查询而导致的低效结果和应用程序崩溃.

请建议我如何执行一个查询来匹配类似我的击键或操作系统在ContactsProvider中的任何其他方式来执行这样的智能搜索

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 15:28:48

如果你要刷新每一个数字的列表,按下这个技术就不能工作了,因为它太慢了。

更好的选择是从 DB中读取的所有联系人名称,并将它们存储在一个简单的ArrayList<String>或类似的集合中,最好是在读取名称时将它们转换为toLowerCase(),以便在下一步更容易地进行搜索。

接下来,对于按下的每一个数字,从输入的数字构建一个正则表达式模式,例如"234“将转换为模式.*[abc][def][ghi].*

构建模式之后,遍历名称列表,并返回与模式匹配的名称。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40457293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档