在活动之间共享游标

时间:2010-11-21 10:14:28

标签: android android-activity cursor

我认为以下情况很常见,但我无法想出实现它的方法:

我们有三个活动和一个数据库。我们要求用户输入数据库中的搜索。查询应该是none,one或者结果。

  • 如果没有,您可以通知用户。
  • 如果只有一个,则使用正确的视图在新活动中显示它。
  • 如果你得到很多,你可以在列表中显示它们,让用户选择正确的一个,然后将其传递给活动,只显示一个结果的数据。

问题在于,为了知道结果的数量,您需要在第一个活动中进行查询(并获取光标)。如果您获得多个结果,则需要将数据(传递光标?)发送到列表活动。在列表活动中再次执行查询可能不对,对吧?

我知道您可以通过使用内容提供商来共享游标,但由于活动来自同一个应用程序并且数据是私有的(外部没用),所以不要认为可以让其他任何人使用它。

我在这里读到你可以创建一个可分割的光标并将其发送到捆绑包中,但我不确定这是否是正确的用途。

有关如何解决这个问题的想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

选项#1:搜索活动执行的查询只是SELECT _ID FROM ...在“无”情况下,它显示消息。在“one”情况下,它将匹配_ID传递给详细活动,以通过查询获取该行的所有所需列来查看匹配。在“很多”情况下,它将搜索项传递给列表活动,列表活动运行完整查询(包括显示列表所需的所有列)。

选项#2:将搜索活动和列表活动合并为一个活动。基本上,将“搜索并选择要查看的项目”视为“UI事务”,并在一个活动中完成所有操作。搜索活动将执行足以在“很多”情况下填充列表的查询,通过AlertDialog或其他内容在ViewFlipper或主活动本身中显示列表。在“无”情况下,它显示消息。在“一个”情况下 - 或者当用户点击列表中的条目时 - 它将内容传递给详细活动以查看该项目。

选项#3:将您的搜索查询移至列表活动 - 您的搜索活动会通过附加内容将搜索信息传递给列表活动,该附加内容会rawQuery()中的onCreate()。列表活动处理“无”和“很多”情况。在“一”的情况下,它只是在详细活动和startActivity()上调用finish(),因此当用户按下BACK时,控件将返回搜索活动。

在其他条件相同的情况下,我可能选择#2选项。