2014-01-24 45 views
17

我正在通過Android documentation on Fragments。定義Fragment的UI的佈局可以在Activity的佈局中定義,在單獨的.xml文件中定義,或根本不定義。Android非UI片段使用

根據文檔

你也可以使用一個片段,以提供活動後臺行爲,而不呈現附加UI。

爲什麼我需要使用另一個片段來向活動添加功能,而不是在活動中定義更多功能?這樣的非UI片段只是爲了模塊化嗎?採用這種方法還有另外一個原因嗎?我很欣賞一個適合使用非UI片段的例子。

非常感謝您的幫助。

+5

伊莫的原因之一,是因爲該片段也可以堅持,如果託管活性被破壞(當你旋轉屏幕),所以管理後臺任務更簡單,如果任務在一個片段內並且片段不被破壞 – Blackbelt

+0

看看這個:http://stackoverflow.com/questions/11531648/what-is-the-use-case- for-a-fragment-with-no-ui –

+0

@blackbelt如果您需要後臺任務,請使用由某個全局類生成的服務,AsyncTask或Runnable。當用於後臺任務的片段已經存在很長時間時,你的論證似乎並不合理。 – AndroidDev

回答

20

我想這是關於保留的片段,您可以調用setRetainedInstance(true)的Inside片段,這樣在配置更改期間將不會重新創建您的片段。通常當你旋轉你的設備時,所有的片段都將被重新創建。如果你在onCreate()中調用setRetainedInstance(true),那麼你的片段實例將不會被重新創建。

它有什麼用? - 您可以將一些數據,數組等放入片段中,並且在配置更改期間不會被破壞。您也可以將異步任務放入此片段中,並且在主要活動輪換後,片段中的異步任務仍將能夠傳遞其結果。

片段的另一個有用的功能是,您可以在多個活動中輕鬆地重用它們。這意味着您可以將一些常用邏輯放入非UI片段中。你可以說讓你的活動用基類來完成它,但是你只能擴展一個類。

,並從谷歌簡單的例子(實際使用線程內保留的片段):

https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.java

+0

爲了完整起見,除了旋轉之外,您認爲除了保留的碎片將被證明是有用的之外,還有其他此類配置是否會發生變化? – anna

+0

只是爲了完成答案:我開發的另一個用例。該片段有一個帶有collapseActionView的菜單,可以觸發搜索任務,顯示自動完成的建議並觸發新的片段到主UI。可以猜測它可以在活動上完成,但它的組織性和模塊化程度都高於SearchBarFragment.java,只是將其實例化爲我想要的活動。 – Budius

+1

@alig屏幕旋轉是你會遇到的最常見的,在這裏查看完整列表:http://developer.android.com/guide/topics/manifest/activity-element.html#config – marcinj