如何对SimpleCursorAdapter支持的Android ListView进行文本过滤?

我有一个由SimpleCursorAdapter支持的ListView。

我希望能够像你的联系人列表一样过滤列表,只需键入,我就遇到了textFilterEnabled()

问题是,我无法看到如何使用SimpleCursorAdapter。

这有可能吗?
如果是这样,它是如何完成的?

setTextFilterEnabled()方法不会自动实现过滤,因为它不知道Cursor中应该过滤哪些文本。

这个android-developers线程有更多细节。

实际上,前几天有一个很好的问题,实际上与你的问题非常相似; 虽然它最初是在设备上没有物理键盘时询问如何处理过滤:

  • 如何在Android上动态更新ListView

对于SimpleCursorAdapter游标,您只需要使用setFilterQueryProvider,根据约束为游标运行另一个查询:

 m_Adapter.setFilterQueryProvider(new FilterQueryProvider() { public Cursor runQuery(CharSequence constraint) { Log.d(LOG_TAG, "runQuery constraint:"+constraint); //uri, projection, and sortOrder might be the same as previous //but you might want a new selection, based on your filter content (constraint) Cursor cur = managedQuery(uri, projection, selection, selectionArgs, sortOrder); return cur; //now your adapter will have the new filtered content } }); 

添加约束时(例如,使用TextView),必须过滤适配器:

 public void onTextChanged(CharSequence s, int start, int before, int count) { Log.d(LOG_TAG, "Filter:"+s); if (m_slvAdapter!=null) { m_Adapter.getFilter().filter(s); } } 

希望这可以帮助。 我会尝试写一篇完整的文章,接下来的几天会有源代码。

我发现这篇文章有用http://androidcookbook.oreilly.com/Recipe.seam;jsessionid=CE37400B3E545937B70BE2E9F94E78BB?recipeId=404

基本上,你在listview上setTextFilterEnabled(true) ,并在setTextFilterEnabled(true)上使用setStringConversionColumn()setFilterQueryProvider()