2012-12-08 75 views
2

我正在尝试使用游标进行水平滑动,但我只是没有注意什么,希望这里有人能帮助我理解。将光标传递给其他活动安全吗?

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

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

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

所以我假设当在ListView中点击一个项目时,我需要启动一个包含ViewPager的活动。此ViewPager由PagerAdapter支持,它负责在适当的位置提取视图。

所以我想通过列表中的活动细节活动中使用的CursorAdapter,然后实施PagerAdapter横穿光标显示视图寻呼机当前项目的细节。这似乎很简单:getItem(pos)会叫cursor.moveToPosition(pos)然后创建从游标片段等

但(1)我不知道如何将CursorAdapter传递给一个活动,因为我不认为它可以(2)我很犹豫是否将CursorAdapter传递给另一个活动,因为没有附加LoaderCallbacks来管理生命周期。

一个可行的办法是启动新的活动,有活动执行新的搜索,获得同等光标在列表中找到活动光标。例如,列表活动可能显示了匹配“title = foo”的项目,所以当单击项目10时,我们创建一个新的细节活动,显示关于项目10的信息,还执行“title = foo”搜索以获得可用于水平滑动的光标。但这意味着我正在执行相同的搜索两次:一次在列表视图中,一次在分页视图中。如果搜索需要一些时间,这可能是一个问题。

我也可以存储在一些全局静态区光标(如Application),但似乎充满风险为好。

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

我敢肯定,这是一个常见的场景,所以我想知道什么是跨多个活动游标管理最佳实践,或者一些其他的方法可能会更好。

+0

难道你不能创建一个数据库来支持你的列表项并将索引传递给信息活动吗?或者在列表视图顶部创建一个隐藏视图,以显示所选项目的信息,并在用户想要返回列表视图时将其隐藏。 – Rawr

+0

感谢您的评论。您对在现有活动中现有列表视图顶部创建详细视图的建议感兴趣。根本不使用单独的活动。我假设这里将从'onListItemClicked'处理程序的布局中移除列表视图,然后将'ViewPager'添加到布局中。棘手的问题将是处理后退按钮以返回到原始列表视图,以及在细节视图与列表视图(使用片段)并存时横屏模式下该做什么。但我会给这个更多的想法。 –

+0

另外我正在使用一个数据库;如果使用单独的详细活动,则一个选项(我已经建议)将再次执行相同的搜索,并根据列表项的位置调用'cursor.moveToPosition()'。我不喜欢这个选项,因为这意味着执行两次相同的搜索并出现相关的性能问题。 –

回答

2

不,请不要将任何光标或光标适配器或类似的东西传递给其他活动。在这个过程的某个层次上,你必须通过活动的context才能创建对象。如果该对象以某种方式使用他人的上下文进入另一个活动,事情可能会变得疯狂。

此外,我不明白你为什么需要适配器本身。难道你没有办法只用光标(重新实例化)你的新活动的同一个光标,通过点击的位置并使你的PagerAdapter,然后预先选择你想查看的细节位置?就像你说的,但你不需要一个新的搜索,通过position的意图。

+0

感谢您的评论。我有点认为在活动之间传递游标是一个坏主意,这就是为什么我不喜欢这样做并寻求建议。我认为你在这里建议的是在新的活动中生成一个新的游标,然后根据所点击的列表项的位置移动该游标?但我不确定如何在不执行其他搜索的情况下在新的活动中创建新的游标。 –

+0

好的,你必须执行查询。但是一个查询不会是你需要的最耗费资源的步骤。你只需要查询加载你的'pageAdapter',然后根据单击项目的位置移动* pageAdapter *。 – mango

+0

所以我选择在新的活动中生成一个新的查询。这让我很难执行相同的搜索两次,但我没有看到其他安全的方式。 –

相关问题