Fragments應(yīng)該作為你實(shí)現(xiàn)UI界面默認(rèn)選擇。你可以重復(fù)使用Fragments用戶接口來 組合成你的應(yīng)用。我們強(qiáng)烈推薦使用Fragments而不是activity來呈現(xiàn)UI界面,理由如下:
提供多窗格布局解決方案?Fragments 的引入主要將手機(jī)應(yīng)用延伸到平板電腦,所以在平板電腦上你可能有A、B兩個(gè)窗格,但是在手機(jī)應(yīng)用上A、B可能分別充滿 整個(gè)屏幕。如果你的應(yīng)用在最初就使用了fragments,那么以后將你的應(yīng)用適配到其他不同尺寸屏幕就會(huì)非常簡(jiǎn)單。
屏幕間數(shù)據(jù)通信?從一個(gè)Activity發(fā)送復(fù)雜數(shù)據(jù)(例如Java對(duì)象)到另外一個(gè)Activity,Android的API并沒有提供合適的方法。不過使用Fragment,你可以使用 一個(gè)activity實(shí)例作為這個(gè)activity子fragments的通信通道。即使這樣比Activity與Activity間的通信好,你也想考慮使用Event Bus架構(gòu),使用如?Otto?或者?greenrobot EventBus作為更簡(jiǎn)潔的實(shí)現(xiàn)。 如果你希望避免添加另外一個(gè)類庫,RxJava同樣可以實(shí)現(xiàn)一個(gè)Event Bus。
Fragments 一般通用的不只有UI?你可以有一個(gè)沒有界面的fragment作為Activity提供后臺(tái)工作。 進(jìn)一步你可以使用這個(gè)特性來創(chuàng)建一個(gè)fragment 包含改變其它fragment的邏輯?而不是把這個(gè)邏輯放在activity中。
很不幸,我們不建議廣泛的使用嵌套的fragments,因?yàn)?有時(shí)會(huì)引起matryoshka bugs。我們只有當(dāng)它有意義(例如,在水平滑動(dòng)的ViewPager在 像屏幕一樣fragment中)或者他的確是一個(gè)明智的選擇的時(shí)候才廣泛的使用fragment。
在一個(gè)架構(gòu)級(jí)別,你的APP應(yīng)該有一個(gè)頂級(jí)的activity來包含絕大部分業(yè)務(wù)相關(guān)的fragment。你也可能還有一些輔助的activity ,這些輔助的activity與主activity 通信很簡(jiǎn)單限制在這兩種方法?Intent.setData()
?或?Intent.setAction()
或類似的方法。
更多建議: