Fragment全解析(3):我的解決方案

發表於2016-05-09

如果你通讀了本系列的前兩篇,我相信你可以寫出大部分場景都能正常執行的Fragment了。如果你想了解更多,那麼你可以看看我封裝的這個庫:Fragmentation。

本篇主要介紹這個庫,解決了一些BUG,使用簡單,提供實時檢視棧檢視等實用功能。


原始碼地址:Github,歡迎Fork,提Issues 。

Demo網盤下載
Demo演示:單Activity+多Fragment

Fragment全解析(3):我的解決方案

demo.gif

Fragmentation

為”單Activity + 多Fragment的架構”,”多模組Activity + 多Fragment的架構”而生,幫你簡化使用過程,修復了官方Fragment庫存在的一些BUG。

特性

1、為重度使用Fragment而生
2、提供了方便的管理Fragment的方法
3、有效解決Fragment重疊問題
4、實時檢視Fragment的(包括巢狀Fragment)棧檢視,方便Fragment巢狀時的除錯
5、增加啟動模式、startForResult等類似Activity方法
6、修復官方庫裡pop(tag/id)出棧多個Fragment時的一些BUG
7、完美解決進出棧動畫的一些BUG,更自由的管理Fragment的動畫
8、支援SwipeBack滑動邊緣退出(需要使用Fragmentation_SwipeBack庫,詳情README)

如何使用

1、專案下app的build.gradle中依賴:

2、Activity繼承SupportActivity:

3、Fragment繼承SupportFragment

API

SupportActivity
開啟 棧檢視 的提示框,在複雜巢狀的時候,可以通過這個來清洗的理清不同階級的棧檢視。

除此之外包含大部分SupportFragment的方法,請自行檢視。

SupportFragment
1、啟動相關:

2、關閉Fragment:

3、在SupportFragment內,支援監聽返回按鈕事件:

4、 定義當前Fragment的動畫,複寫onCreateFragmentAnimation方法:

5、獲取當前Activity/Fragment內棧頂(子)Fragment:

6、獲取棧內某個Fragment物件:

更多
隱藏/顯示 輸入法:

下面是DetailFragment startForResult ModifyTitleFragment的程式碼:

下面是以一個singleTask模式start一個Fragment的標準程式碼:

關於Fragmentation幫你恢復Fragment,你需要知道的

2個概念:

“同級”式:比如QQ的主介面,“訊息”、“聯絡人”、“動態”,這3個Fragment屬於同級關係
“流程”式:比如登入->註冊/忘記密碼->填寫資訊->跳轉到主頁Activity

對於Activity內的“流程”式Fragments(比如登入->註冊/忘記密碼->填寫資訊->跳轉到主頁Activity),Fragmentation幫助你處理了棧內的恢復,保證Fragment不會重疊,你不需要再自己處理了。

但是如果你的Activity內的Fragments是“同級”的,那麼需要你複寫onHandleSaveInstanceState()使用findFragmentByTag(tag)getFragments()去恢復處理。

而如果你有Fragment巢狀,那麼不管是“同級”式還是“流程”式,你都需要自己去恢復處理。

相關文章