如何筛选AutoCompleteTextView的结果? [英] How to filter results of AutoCompleteTextView?

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

问题描述

我有一个AutoCompleteTextView设置为使用游标肚里了我的联系方式。现在的问题是,我有它填充下拉正确的,但它不是过滤后的结果I型。

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.

下面是我的code适配器的光标并设置:

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);

这里是XML的simple_contact_textview:

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>

我如何筛选基于用户正在输入下拉的结果?例如,如果用户开始输入和,我将如何有安德鲁,刘德华和小敏的出现?

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()

Construct a FilterQueryProvider and pass it into 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);
    }
});

在code以上将返回匹配的任何位置在字符串中的结果(不只是在开始。同时,由于它使用参数化查询,您的用户将无法通过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天全站免登陆