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

Cod*_*ile 18 database android listview filter cursor

我有一个由SimpleCursorAdapter支持的ListView.

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

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

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

rad*_*hoo 24

对于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
  }

});
Run Code Online (Sandbox Code Playgroud)

添加约束时(例如,通过使用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);
  }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.我将尝试撰写一篇完整的文章,其中包含未来几天的源代码.

  • 如果我们使用SQLite数据库,我们应该如何在runQuery中调用游标?使用与用于为SimpleCursorAdapter创建游标的实例相同的databaseHelper实例给出了"fillWindow()中的无效语句"错误. (2认同)

Chr*_*Orr 7

setTextFilterEnabled()方法不会自动实现过滤,因为它不知道是什么在你的Cursor文字应该针对被过滤.

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

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