【问题标题】:Filter out items from cursor从光标中过滤掉项目
【发布时间】:2014-09-28 19:12:25
【问题描述】:

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

例如,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());
    }

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

任何帮助将不胜感激,干杯!

【问题讨论】:

    标签: android android-cursor


    【解决方案1】:

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

    您可以通过将内容发送到“查询”的“选择”参数来做到这一点,例如:

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

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

    您可能还想查看SQLQueryBuilder

    至于是否可能,我在documentation 中找不到任何可以满足您需求的东西。我认为Cursor 是只读的。

    【讨论】:

    • 有关 LIKE 及其语法的更多信息,请查看sqlite.org/lang_expr.html#like
    • 太棒了,这似乎可以完成这项工作。你知道在这种情况下是否有一个“OR”sql 运算符吗?我有多个FILTER_TEXT 参数。
    • 我认为您应该能够通过将它们放在括号中并在它们之间用 OR 将它们链接在一起。
    【解决方案2】:
    • 如果您想实现一个可由用户过滤的列表,您可以使用 CursorAdapter 并将 ListViews setTextFilterEnabled 设置为 true
    • 您可以使用CursorLoader,在后台加载新光标并在加载时将其换入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多