2

我正在尝试使用光标进行水平滑动,但我只是没有摸索某些东西,希望这里有人可以帮助我理解。

我有一个显示项目列表的活动。它使用ListView由 custom 支持的 a CursorAdapter,并且该适配器由 a 管理LoaderCallback。这都是标准的东西。

当用户单击列表中的某个项目时,我想显示有关该项目的详细信息。目前我开始一个新的活动,传递所选项目的 ID。此活动将从数据库中加载有关该项目的信息。再次,标准的东西。

现在,在项目列表之间来回切换并单击项目以显示有关该项目的更多详细信息并不是最好的用户体验,最好允许用户单击项目以显示其信息,然后允许滑动显示列表中下一个或上一个项目的详细信息。

所以我假设当在 中单击一个项目时ListView,我需要启动一个包含ViewPager. 这ViewPager是由负责在适当位置获取视图的 PagerAdapter 支持的。

因此,我想CursorAdapter将列表活动中的 used 传递给详细信息活动,然后实现一个PagerAdapter遍历光标以在视图寻呼机中显示当前项目的详细信息的方法。这看起来很简单:getItem(pos)会调用cursor.moveToPosition(pos)然后从光标创建一个片段,等等。

但是(1)我不确定如何将 a 传递CursorAdapter给一个活动,因为我认为它不能被序列化以在一个包中传递,并且(2)我很犹豫是否将 CursorAdapter 传递给另一个活动,因为有没有LoaderCallbacks附加来管理生命周期。

一种可能的解决方案是启动新活动并让该活动执行新搜索以获取与列表活动中找到的光标等效的光标。例如,列表活动可能已经显示了匹配“title=foo”的项目,因此当单击项目 10 时,我们创建一个新的详细活动,显示有关项目 10 的信息,但还执行“title=foo”搜索以获得可用于水平滑动的光标。但这意味着我要执行两次相同的搜索:一次在列表视图中,一次在分页视图中。如果搜索需要一些时间,这可能是一个问题。

我还可以将光标存储在某个全局静态区域(例如Application)中,但这似乎也充满了危险。

还有Parcelable,但我认为这意味着我在一侧序列化光标并在另一侧反序列化它。对于大型列表,再次执行搜索以获取新光标可能更有效。

我确信这是一个常见的场景,所以我想知道在多个活动中管理游标的最佳做法是什么,或者其他一些方法是否更好。

4

1 回答 1

2

不,请不要将任何光标或光标适配器或类似的东西传递给其他活动。在流程的某个级别,您必须必须传递活动context才能创建对象。如果那个对象以某种方式使用另一个的上下文变成了另一个活动,事情可能会变得疯狂。

此外,我不明白为什么您首先需要适配器本身。有没有一种方法可以让您只为新活动使用光标(重新实例化)相同的光标,传递点击的位置PagerAdapter,然后预先选择您想要查看的详细位置?就像你说的,但你不需要新的搜索,传递position意图。

于 2012-12-08T03:22:00.423 回答