【发布时间】:2012-12-08 11:28:44
【问题描述】:
我正在尝试使用光标进行水平滑动,但我只是没有摸索某些东西,希望这里有人可以帮助我理解。
我有一个显示项目列表的活动。它使用由自定义CursorAdapter 支持的ListView,并且该适配器由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,但我认为这意味着我在一侧序列化光标并在另一侧反序列化它。对于大型列表,再次执行搜索以获取新光标可能更有效。
我确定这是一种常见情况,所以我想知道在多个活动中管理游标的最佳做法是什么,或者其他方法是否更好。
【问题讨论】:
-
您不能创建一个数据库来支持您的列表项并将索引传递给信息活动吗?或者在列表视图之上创建一个隐藏视图,以显示所选项目的信息,并在用户想要返回列表视图时将其隐藏。
-
感谢您的评论。我对您在现有活动的现有列表视图之上创建详细视图的建议很感兴趣。而不是使用单独的活动。我假设这里会从
onListItemClicked处理程序的布局中删除列表视图,然后将ViewPager添加到布局中。棘手的问题将是处理返回按钮以返回原始列表视图,以及在横向模式下做什么,当详细视图将与列表视图一起存在时(使用片段)。但我会多考虑一下。 -
我也在使用数据库;如果使用单独的详细信息活动,一个选项(我已经建议)是再次执行相同的搜索,然后根据列表项的位置调用
cursor.moveToPosition()。我不喜欢这个选项,因为这意味着执行两次相同的搜索会带来相关的性能问题。
标签: android android-viewpager android-cursor