从光标中过滤掉项目

时间:2011-06-29 23:32:58

标签: android android-cursor

我正在尝试从游标对象中删除一个项目,我不知道该怎么做(或者如果可能的话)。我实际上并不想从数据库中删除该项目,只是“过滤”它而不显示它,具体取决于用户设置。

例如,FILTER_TEXT来自应用程序首选项,它包含游标必须包含的文本,否则将被删除。

Cursor mCursor = mDB.query(dbTable, new String[] {KEY_ROWID, KEY_NAME,
            KEY_URL}, null, null, null, null, null);

    if (mCursor.moveToFirst()) {
        do {
            if (!mCursor.getString(1).contains(FILTER_TEXT)) {
                // Remove cursor item here
            }
        } while (mCursor.moveToNext());
    }

我很确定这是解决此问题的正确方法,但我找不到任何方法从光标中删除项目......

任何帮助都会受到赞赏,干杯!

2 个答案:

答案 0 :(得分:0)

我认为您可能希望在它进入Cursor之前对其进行过滤。尝试更改生成它的查询,以便这些项永远不会进入它。这样,SQLite可以在消耗掉更多资源之前过滤掉那些不需要的东西。

您可以通过将事物发送到'query'的'selection'参数来完成此操作,例如:

KEY_NAME + " LIKE '%" + FILTER_TEXT + "%'"

(这可能需要一些调整,我的SQL生锈了。)

您可能还想查看SQLQueryBuilder

至于是否可能,我在documentation中找不到任何你想要的东西。我认为Cursor是只读的。

答案 1 :(得分:0)

  • 如果您想实现一个可由用户过滤的List,您可以使用CursorAdapter并将ListViews setTextFilterEnabled设置为true
  • 您可以使用CursorLoader在后台加载新光标,并在加载时将其交换。