2010-11-21 72 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