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 中的这些更改。相反,我为第二个应用程序创建了一个自定义数据集管理器。
(不确定这是否是一个真正相关的问题,但既然有人投了赞成票,我将分享我的最终结论)
我有一个图库应用程序,它使用 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 中的这些更改。相反,我为第二个应用程序创建了一个自定义数据集管理器。
(不确定这是否是一个真正相关的问题,但既然有人投了赞成票,我将分享我的最终结论)