2013-12-10 231 views
0

我一直在努力將我的應用程序從多個活動更改爲單個活動和多個碎片。我有多個片段和單活動A.Android碎片saveInstanceState

其次是我的情況下,當應用程序有多個活動。

  1. 活性A - >活動B - >活動Ç - >活動d
  2. Web請求在所有活動發送用於在背景每60secs,然後將UI更新。
  3. 我送只在onResume()方法請求,並取消在onPause()方法的要求和計時器,因爲其中僅可見活動發送請求和別人不一樣。
  4. 我在onSaveInstanceState(Bundle savedInstanceState)保存一個布爾值來檢查請求是否爲第一時間派出。只有當我第一次顯示進度條,然後繪製視圖。如果沒有(如果活動從後退棧中恢復),則進度條不顯示,並且僅在成功響應時才更新UI。
  5. 我從活動A移動到B.現在活動A的onPause()方法中取消了Web服務請求。在活動B的onResume()中再次調用Web服務,顯示進度條(因爲它的第一次活動加載)並且繪製視圖。工作全部類似於活動A.
  6. 從活動B中,我按下了後退按鈕,活動A恢復。因此,Web服務從ActivityA的onResume()方法發送。這一次我檢查savedInstanceState不爲空,因此我不顯示進度欄(以允許用戶仍然繼續活動B)。

以下是實現單活動和多重片段後,我在做什麼現在。

  1. 我不會更換任何片段。我只是添加它們。
  2. 由於僅添加它們,所有片段都在時間間隔內主動發送Web服務。
  3. 如果我替換片段而不是添加它們,視圖將從第一個創建,這不是我所需要的。

我怎樣才能做到這一點?提前致謝!!

回答

0

這裏是我的建議:

爲WebService投票創建一個無頭片段,請參閱:http://www.vogella.com/articles/AndroidFragments/article.html

該片段在你的第一個活動,並將無頭片段的工作就是輪詢Web服務每60秒就像現在一樣。

此時不再需要布爾值,只需執行findFragmentByTag(TAG_OF_HEADLESS_FRAGMENT)並檢查它是否爲null,以確定它是否是第一次啓動Activity。現在

,通知,現在是可見的,當它是時候更新你需要實現一個片段回調格局的UI哪個片段,請參閱:http://developer.android.com/training/basics/fragments/communicating.html

隨着回調,通信流會是這樣的:

WebPollFragment -> Activity -> B When fragment B is in focus 
WebPollFragment -> Activity -> C When fragment C is in focus 
WebPollFragment -> Activity -> D And so on... 

這也說明我最後的忠告,這是你應該在我看來代替相互碎片(你可以用無頭片段做後臺作業)。

希望這會讓你在路上。

+0

是的。這或多或少是我所做的。我有一個單獨的活動,使用PagerAdapter和ViewPager作爲主選項卡在片段之間滑動。然後,每個其他選項卡都會在整個屏幕上添加一個片段。選擇另一個選項卡會替換當前片段。 – cYrixmorten