我有一个使用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
顺序,从此,即使排序的数据基于变化?
编辑:可能的解决方案
我唯一能想到的是维护一个“订单”列,查看器活动将对其进行排序,并选择一个“选择”列来处理选择。
在启动查看器之前,我将遍历光标插入“订单”计数器。然后我将批量插入。无论观察者中的元数据如何变化,查看者活动都应保持先前的排序。
两个额外的列感觉有点像黑客,但它应该工作。我能想到的唯一另一件事是为查看器管理一个单独的自定义数据源,但这有它自己的问题。
希望有更好的方法来做到这一点。
答案 0 :(得分:0)
使用CursorLoader
的主要原因是利用一个基本活动,可以确保在没有额外编码的情况下在活动之间使用相同的数据集。但是,由于我的第二个活动需要“锁定”到之前的数据集上,我意识到这是CursorLoader
的一个不好用途,因为它的主要优势是与数据库的更改保持同步。我实际上想在第二个活动中忽略这些变化。相反,我为第二个应用程序创建了一个自定义数据集管理器。
(不确定这是一个真正相关的问题,但是由于有人投了票,我会分享我的最终结论)