如何过滤 AutoCompleteTextView 的结果? [英] How to filter results of AutoCompleteTextView?

查看:31
本文介绍了如何过滤 AutoCompleteTextView 的结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 AutoCompleteTextView 设置为使用在我的联系人上移动的光标.问题是,我让它正确地填充了下拉列表,但它在我输入后没有过滤结果.

I have an AutoCompleteTextView set to use a cursor which goes over my Contacts. The problem is, I have it populating the dropdown correctly, but its not filtering the results after I type.

这是我的光标和适配器设置代码:

Here is my code for the cursor and setting of the adapter:

edt_Contact = (AutoCompleteTextView)findViewById(R.id.compose_edtContact);

cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        new String[] {Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER}, 
        null,null,null);
startManagingCursor(cursor);
String[] from = new String[] { Phone.DISPLAY_NAME, Phone.NUMBER};
int[] to = new int[] { R.id.contact_name, R.id.contact_phoneNo};
adapter = new SimpleCursorAdapter(this, R.layout.simple_contact_textview, cursor, from, to);

edt_Contact.setAdapter(adapter);

这里是 simple_contact_textview 的 xml:

And here is the xml for simple_contact_textview:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" android:padding="5sp" android:paddingBottom="5sp" android:background="#FFFFFFFF">
    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/contact_name" 
        android:textColor="#FF000000" 
        android:textSize="20sp" 
        android:text="Name">
    </TextView>
    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/contact_phoneNo" 
        android:paddingLeft="10sp" 
        android:textColor="#FF000000" 
        android:textSize="20sp" 
        android:text="Number" 
        android:ellipsize="end">
    </TextView>
</LinearLayout>

如何根据用户输入的内容过滤下拉结果?例如,如果用户开始输入and",我将如何显示andrew"、andy"和mandy"?

How do I filter the dropdown results based on what the user is typing? For instance, if the user starts typing "and", how would I have "andrew", "andy", and "mandy" appear?

推荐答案

构造一个 FilterQueryProvider 并传入adapter.setFilterQueryProvider().

adapter.setFilterQueryProvider(new FilterQueryProvider() {
    public Cursor runQuery(CharSequence constraint) {
        String s = '%' + constraint.toString() + '%';
        return getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            new String[] {Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER},
            Phone.DISPLAY_NAME + ' LIKE ? OR ' + Phone.NUMBER + ' LIKE ?',
            new String[] { s, s },
            null);
    }
});

上面的代码将返回匹配字符串中任何位置的结果(不仅仅是在开头.此外,由于它使用参数化查询,您的用户将无法通过 SQL 注入攻击损坏数据库.

The code above will return results that match anywhere in the string (not just in the beginning. Also, since it uses parameterized queries, your users won't be able to damage the DB via a SQL injection attack.

(不在真正的计算机附近,所以我无法测试上面的内容——可能有一些语法错误.)

(Not near an actual computer, so I can't test the above -- probably some syntax errors in there.)

这篇关于如何过滤 AutoCompleteTextView 的结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆