Fragment系列文章:
1、Fragment全解析系列(一):那些年踩過的坑
2、Fragment全解析系列(二):正確的使用姿勢
3、Fragment之我的解決方案:Fragmentation
如果你通讀了本系列的前兩篇,我相信你可以寫出大部分場景都能正常運行的Fragment了。如果你想了解更多,那么你可以看看我封裝的這個庫:Fragmentation。
本篇主要介紹這個庫,解決了一些BUG,使用簡單,提供實時查看棧視圖等實用功能。
源碼地址:Github,歡迎Star,Fork。
Demo網盤下載(V_0.9.0)
Demo演示:
單Activity + 多Fragment,項目中有3個Demo。
流式的單Activity+多Fragment:

類似微信交互方式的單Activity+多Fragment:(全頁面支持滑動返回)

類似新版仿知乎交互方式的單Activity+多Frgment:

Fragmentation
為"單Activity + 多Fragment的架構","多模塊Activity + 多Fragment的架構"而生,幫你簡化使用過程,輕松解決各種復雜嵌套等問題,修復了官方Fragment庫存在的一些BUG。
特性
1、快速開發出各種嵌套設計的Fragment App
2、實時查看Fragment的(包括嵌套Fragment)棧視圖的對話框和Log,方便調試
3、增加啟動模式、startForResult等類似Activity方法
4、類似Android事件分發機制的Fragment回退方法:onBackPressedSupport(),輕松為每個Fragment實現Back按鍵事件
5、New!!! 提供onSupportVisible()等生命周期方法,簡化嵌套Fragment的開發過程; 提供統一的onLazyInitView()懶加載方法
6、提供靠譜的 Fragment轉場動畫 的解決方案
7、更強的兼容性, 解決多點觸控、重疊等問題
8、支持SwipeBack滑動邊緣退出(需要使用Fragmentation_SwipeBack庫,詳情README)

重大更新日志
0.9.X 來了! 詳情點這里
1、解決多點觸控問題
2、onFragmentResult()現在在任何情況都可以被正確觸發了
3、更強的兼容性,解決已知BUG
4、對於25.1.0+的 v4包,完善了SharedElement!
0.8.X 來了!
1、提供onSupportVisible(),onSupportInvisible()等生命周期方法,簡化嵌套Fragment的開發過程;
2、提供統一的onLazyInitView()懶加載方法;
3、SupportActivity提供registerFragmentLifecycleCallbacks()來監控其下所有Fragment的生命周期;
4、可以自定義Tag了!
5、事務提交模式默認為commitAllowingStateLoss().
如何使用
1. 項目下app的build.gradle中依賴:
1 // appcompat v7包是必須的 2 compile 'me.yokeyword:fragmentation:0.9.3' 3 // 如果想使用SwipeBack 滑動邊緣退出Fragment/Activity功能,請再添加下面的庫 4 // compile 'me.yokeyword:fragmentation-swipeback:0.7.9'
2. Activity繼承SupportActivity:
1 public class MainActivity extends SupportActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(...); 7 if (savedInstanceState == null) { 8 loadRootFragment(R.id.fl_container, HomeFragment.newInstance()); 9 } 10 }
3. Fragment繼承SupportFragment:
1 public class HomeFragment extends SupportFragment { 2 3 private void xxx() { 4 // 啟動新的Fragment, 同時還有start(fragment,SINGTASK)、startForResult、startWithPop等啟動方法 5 start(DetailFragment.newInstance(HomeBean)); 6 // ... 其他方法請自行查看 API 7 }
