我正在尝试使用光标进行水平滑动,但我只是没有摸索某些东西,希望这里有人可以帮助我理解。
我有一个显示项目列表的活动。它使用一个ListView
由习俗支持CursorAdapter
,并且该适配器由LoaderCallback
。这都是标准的东西。
当用户单击列表中的某个项目时,我想显示有关该项目的详细信息。目前,我开始一个新活动,传递所选项目的 ID。此活动将从数据库加载有关该项目的信息。再说一遍,标准的东西。
现在,在项目列表之间来回移动并单击某个项目以显示该项目的更多详细信息并不是最佳的用户体验,最好允许用户单击某个项目以显示其信息,然后允许滑动显示列表中下一个或上一个项目的详细信息。
所以我假设当点击一个项目时ListView
,我需要启动一个包含ViewPager
. This ViewPager
由 PagerAdapter 支持,负责在适当的位置获取视图。
所以我想通过CursorAdapter
在列表活动中使用到详细活动,然后实现PagerAdapter
遍历光标以显示视图寻呼机中当前项目的详细信息。这看起来很简单:getItem(pos)
会打电话cursor.moveToPosition(pos)
然后从光标创建一个 Fragment 等。
但是(1)我不知道如何通过CursorAdapter
到一个活动,因为我认为它不能被序列化以在包内传递,并且(2)我无论如何都不愿意将 CursorAdapter 传递到另一个活动,因为没有LoaderCallbacks
附加来管理生命周期。
一种可能的解决方案是启动新活动并让该活动执行新搜索以获得与列表活动中找到的光标等效的光标。例如,列表活动可能显示了与“title=foo”匹配的项目,因此当单击项目 10 时,我们创建一个新的详细信息活动,该活动显示有关项目 10 的信息,同时还执行“title=foo”搜索来获取可水平滑动的光标。但这意味着我要执行两次相同的搜索:一次在列表视图中,一次在分页视图中。如果搜索需要一些时间,这可能会成为一个问题。
我还可以将光标存储在一些全局静态区域(例如Application
)但这似乎也充满了危险。
还有Parcelable
但我认为这意味着我在一侧序列化光标并在另一侧反序列化它。对于大型列表,再次执行搜索以获得新游标可能会更有效。
我确信这是一种常见情况,因此我想知道跨多个活动管理游标的最佳实践是什么,或者其他方法是否可能更好。