【问题标题】:AutoCompleteTextView for contacts email can't get LIKE to work properly联系人电子邮件的 AutoCompleteTextView 无法让 LIKE 正常工作
【发布时间】:2016-09-15 11:19:30
【问题描述】:

我正在一个表单上创建一个 AutoCompleteTextView 字段,我可能希望使用来自 CONTACTS 电子邮件地址的匹配选择来填充该字段。

进行一些搜索,我能够在这里找到一些较旧的示例(有很多折旧的代码......没有更新)但是经过一些试验和错误,我能够让它与第一个字符匹配我键入时的电子邮件地址...虽然我没有 100% 了解它是如何工作的。

我真正想做的是让它在存档的电子邮件地址中显示任何匹配项。也就是说,如果我输入gma,我希望它显示:gmartin@xyz.comgregmaster@yahoo.comjim@gmail.comsam@gmail.com 等。

据我了解,我需要在查询中使用 LIKE 命令。但无论我如何格式化,我得到的结果都是一样的……只匹配电子邮件地址的开头。

这是我当前使用 LIKE 尝试的代码......

    ArrayList<String> emailAddressCollection = new ArrayList<String>();
    ContentResolver cr = getContentResolver();
    String[] projection={ContactsContract.CommonDataKinds.Email.DATA};
    Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, projection, ContactsContract.CommonDataKinds.Email.ADDRESS + " LIKE '%A%'", null, null);
    while (emailCur.moveToNext())
    {
        String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
        emailAddressCollection.add(email);
    }
    emailCur.close();
    String[] emailAddresses = new String[emailAddressCollection.size()];
    emailAddressCollection.toArray(emailAddresses);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, emailAddresses);

    AutoCompleteTextView actextView = (AutoCompleteTextView)findViewById(idTo);
    actextView.setAdapter(adapter);

知道我在这里缺少什么吗?

另外,另一个有点相关的问题,在我的下拉列表中,我想显示匹配的电子邮件地址以及该记录中列出的名称......并在选择时返回电子邮件地址。

这可以使用此代码完成还是我需要查看其他内容?

【问题讨论】:

    标签: android android-contacts sql-like autocompletetextview


    【解决方案1】:

    AutoCompleteTextView 默认设计为仅基于起始字符进行匹配。所以sam@gmail.com中的gma将无法识别。您可以实现自己的小部件,该小部件根据“LIKE”标准进行查找。 Android 仅搜索适配器元素中每个条目的前几个字符。

    如果您必须选择按“喜欢”标准进行搜索,虽然这本身就是一项艰巨的任务,但这是可能的。您可以简单地通过字符串是否包含文本进行搜索,然后选择按此过滤 - 无需每次都查询。或者,您可以尝试搜索执行此操作的库。

    【讨论】:

    • 不,AutoCompleteTextView 是 NOT "designed by default to match based ONLY on the starting characters",匹配仅取决于您正在使用的 Adapter(更准确地说,取决于 @987654327 使用的 Filter @)
    • 那么我遇到的问题是适配器问题、过滤器问题还是其他问题?我知道这是可以做到的,即使是 GMAIL 应用程序也可以在您输入电子邮件地址的任何部分时做到这一点。
    • @Peter 只需使用SimpleCursorAdapter 并设置它的FilterQueryProvider
    • 我实际上在 StackOverFlow 上找到了一个示例,... link... 但是引用了很多折旧代码(我正在为 SDK 15+ 设计)。我想出了如何“修复”其中一些,但不是全部,所以我也无法让它工作
    • "lot of"?例如?
    猜你喜欢
    • 2018-04-27
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多