我正在尝试使用游标进行水平滑动,但我只是没有注意什么,希望这里有人能帮助我理解。将光标传递给其他活动安全吗?
我有一个显示项目列表的活动。它使用一个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
但我认为,这意味着我序列化一侧光标和反序列化它的另一面。对于大型列表,再次执行搜索以获取新的游标可能更有效。
我敢肯定,这是一个常见的场景,所以我想知道什么是跨多个活动游标管理最佳实践,或者一些其他的方法可能会更好。
难道你不能创建一个数据库来支持你的列表项并将索引传递给信息活动吗?或者在列表视图顶部创建一个隐藏视图,以显示所选项目的信息,并在用户想要返回列表视图时将其隐藏。 – Rawr
感谢您的评论。您对在现有活动中现有列表视图顶部创建详细视图的建议感兴趣。根本不使用单独的活动。我假设这里将从'onListItemClicked'处理程序的布局中移除列表视图,然后将'ViewPager'添加到布局中。棘手的问题将是处理后退按钮以返回到原始列表视图,以及在细节视图与列表视图(使用片段)并存时横屏模式下该做什么。但我会给这个更多的想法。 –
另外我正在使用一个数据库;如果使用单独的详细活动,则一个选项(我已经建议)将再次执行相同的搜索,并根据列表项的位置调用'cursor.moveToPosition()'。我不喜欢这个选项,因为这意味着执行两次相同的搜索并出现相关的性能问题。 –