CursorLoader 排序顺序和更新

CursorLoader Sort Order and updates

我有一个图库应用程序,它使用 CursorLoader 允许按特定元数据对图像进行排序。排序是在创建 CursorLoader 时定义的。

            // Returns a new CursorLoader
            return new CursorLoader(
                    this,                   // Parent activity context
                    Meta.Data.CONTENT_URI,  // Table to query
                    projection,             // Projection to return
                    selection,              // No selection clause
                    selectionArgs,          // No selection arguments
                    sort                    // Default sort order
            );

如果用户选择图像,它们将被带到查看器。他们有机会操纵元数据。这会导致自动求助,这可能会造成混淆。所选图像可能会根据排序从中间移动到最后,用户不会意识到这一点,他们只是在他们认为可以滑动时无法滑动。

有没有什么办法可以先对CursorLoader进行排序,然后让它保持_id的顺序,以后即使排序依据的数据发生变化?


编辑:可能的解决方案

我唯一能想到的就是维护一个 'order' 列供查看者 activity 排序,以及一个 'select' 列处理选择。

在启动查看器之前,我将遍历光标并插入一个 'order' 计数器。然后我会批量插入。查看器 activity 应保持之前的顺序,无论查看器中的元数据如何更改。

两个额外的列感觉有点乱,但应该可以。我唯一能想到的另一件事是为查看器管理一个单独的自定义数据源,但这有它自己的问题。

希望有更好的方法来做到这一点。

使用 CursorLoader 的主要原因是利用基础 activity 可以确保在活动之间使用相同的数据集而无需额外编码。然而,由于我的第二个 activity 需要 "lock" 到之前的数据集上,我意识到这是对 CursorLoader 的不良使用,因为它的主要优势是与数据库的更改保持同步。我实际上想忽略第二个 activity 中的这些更改。相反,我为第二个应用程序创建了一个自定义数据集管理器。

(不确定这是否是一个真正相关的问题,但既然有人投了赞成票,我将分享我的最终结论)