2010-11-21 35 views
3

我认为以下情形是常见的,但我不明白的方式来实现它:共享光标

我们有三个活动,和一个数据库。我们要求用户输入一个在数据库中进行搜索的输入。查询应该没有,一个或可能的结果。

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

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

我知道你可以通过使用内容提供者来共享游标,但由于这些活动来自同一个应用程序并且数据是私有的(外部没用),所以没有看到让它成为任何人都可用的点其他。

我在这里阅读,你可以打包一个parcelable游标并发送捆绑,但我不知道如果这是正确的使用。

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

在此先感谢。

回答

3

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

选项2:将搜索活动和列表活动合并为一个活动。基本上,考虑“搜索并选择要查看的项目”作为“UI交易”,并在一项活动中完成。搜索活动将进行足够的查询以填充“许多”情况下的列表,通过AlertDialog或主要活动本身通过ViewFlipper或某物显示列表。在“无”的情况下,它显示消息。在“one”情况下 - 或者当用户点击列表中的条目时 - 它将东西传递给详细活动以查看该项目。

选项#3:将您的搜索查询移至列表活动 - 您的搜索活动通过额外项将搜索信息传递给列表活动,其中rawQuery()onCreate()。列表活动处理“无”和“多”情况。在“one”情况下,它仅在细节活动上调用startActivity(),并在finish()上调用,以便在用户按下BACK时控件返回到搜索活动。

其他都相同,我可能会选择#2。

+0

我去了第3个选项,因为我不知道ViewFlipper(我仍然是一个noob)。我同意你的看法,第二种选择对我来说更好。我会尝试。 谢谢 – Asincrono 2010-11-23 08:54:37

+0

@CommonsWare操作#2是我实现的一种。我想知道你是否可以通过光标而不是东西?我读过,你可以创建一个应用程序(myApp扩展应用程序)就像这样做:http://stackoverflow.com/a/8456148/317889并保存游标在所有活动中使用,这将是理智的? – HGPB 2012-07-13 14:02:14