Fragment之我的解決方案:Fragmentation


Fragment系列文章:
1、Fragment全解析系列(一):那些年踩過的坑
2、Fragment全解析系列(二):正確的使用姿勢
3、Fragment之我的解決方案:Fragmentation

附:SwipeBackFragment的實現分析

如果你通讀了本系列的前兩篇,我相信你可以寫出大部分場景都能正常運行的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   }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM