2012-06-28 27 views
2

我有一個應用程序有4個活動,A,X,Y和Z從任何活動

返回結果

A是一種落地活動,這顯示了一堆的信息從數據庫用戶。

X,Y和Z是由A開始的用於修改數據的活動。這些活動實際上不查詢數據庫,而是將更改後的信息返回給A,後者完成onActivityResult中的所有工作。流程始終是A - > X或Y或Z - > A。這非常完美。

我想要做的是使用戶可以在X,Y和Z之間任意次數的導航,直到點擊保存按鈕。這將修改流程,使A→X→Y→Z→A是可能的。但是,數據只需要從點擊保存的Activity持久化,在該示例中,Z.A然後將從Z接收結果,處理此更改並繼續。如果用戶以這種方式導航,那麼X和Y中發生的事情並不重要,它們已被丟棄。

我在這方面做了一些嘗試。我最好的辦法是在X,Y或Z開始另一個不是A的活動後立即調用finish()。這允許用戶在單擊保存時返回到A,這意味着它的導航方面是正確的,但發送的結果代碼是總是RESULT_CANCELED。我已經研究過使用意向的標誌FLAG_FORWARD_RESULT,但我沒有與它的經驗,並與已經開始爲結果的活動中使用時,它拋出一個錯誤。我不知道這是甚至正確的技術,因爲從我讀過的東西中,只有當調用活動和返回結果的活動之間會有一個活動時纔會使用它。

這樣的流程甚至可能嗎?基本上,我需要一個Activity來啓動另一個結果,允許用戶從第二個活動執行一些任意數量的導航,然後在結束導航時將結果返回到原始活動。它可能只是修改代碼,使得X,Y和Z自己完成數據庫訪問,但是如果可能的話,我寧願避免它。

回答

2

然而,僅需要從點擊保存活動持續的數據,

在我看來,最簡單的做法是不要在Activity A使用startActivityForResult(...),只是使用之後finish()startActivity(...)終止Activity A

然後,當其他任何Activities都有自己的保存按鈕點擊讓他們打電話給startActivity(...)Activity A和傳遞需要被保存爲Intent額外數據。

然後您只需在onCreate(...)方法Activity A中使用getIntent()即可獲得有效的「結果」。如果Intentnull或不包含被持久化預期的數據,那麼這是一個「首次啓動」方案,但如果數據是存在的,你就會知道Activity A開始爲保存操作的一個結果其他Activities

+0

這是一個好主意,謝謝! – MattDavis