如何过滤AutoCompleteTextView的结果?
我有一个 AutoCompleteTextView 设置为使用光标在我的联系人上。问题是,我让它正确填充下拉列表,但在我键入后它没有过滤结果。
这是我的光标和适配器设置的代码:
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:
<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”将如何出现?
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);
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
构造一个
FilterQueryProvider
并将其传递给adapter.setFilterQueryProvider()
。上面的代码将返回与字符串中任何位置匹配的结果(不仅仅是开头)。此外,由于它使用参数化查询,您的用户将无法通过 SQL 注入攻击损坏数据库。
(不在实际计算机附近,所以我无法测试上面的内容——可能其中存在一些语法错误。)
Construct a
FilterQueryProvider
and pass it intoadapter.setFilterQueryProvider()
.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.)
终于尝试了一些有效的方法:
抱歉,如果我剥夺了任何人的答案。所有类似的问题似乎都有很低的观点和答案......
Finally tried something that worked:
Sorry if I robbed anyone of an answer. All questions like this seem to have very low views and answers...