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

标签 android database listview filter android-cursor

我有一个由 SimpleCursorAdapter 支持的 ListView。

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

问题是,我不知道如何让它与 SimpleCursorAdapter 一起工作。

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

最佳答案

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

希望这会有所帮助。过几天我会尽量写一篇完整的文章,附上源码。

关于android - 如何对 SimpleCursorAdapter 支持的 Android ListView 进行文本过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2002607/

相关文章:

android - AppCompatActivity中如何实现ListView?

android - 将固定的、透明的标题附加到 ListView?

javascript - 防止 iScroll 滚动 ListView 过滤器

java - 如何获得波斯语地址

java - 如何使用另一个线程的数据更新 Activity 中的 View ?

java - 使用zxing连续扫描条形码

database - 在 scylla db 中使用 IP 地址作为主键是一个好习惯吗?

android - 试图掌握使用缩放和平移显示图像的方法

database - 如何用git迁移数据库?

database - DBI 是 Perl 中访问数据库的唯一方法吗