Fragment系列文章:
1、Fragment全解析系列(一):那些年踩過的坑
2、Fragment全解析系列(二):正確的使用姿勢(shì)
3、Fragment之我的解決方案:Fragmentation
附:SwipeBackFragment的實(shí)現(xiàn)分析
如果你通讀了本系列的前兩篇,我相信你可以寫出大部分場(chǎng)景都能正常運(yùn)行的Fragment了。如果你想了解更多,那么你可以看看我封裝的這個(gè)庫:Fragmentation。
本篇主要介紹這個(gè)庫,解決了一些BUG,使用簡(jiǎn)單,提供實(shí)時(shí)查看棧視圖等實(shí)用功能。
源碼地址:Github,歡迎Star,F(xiàn)ork。
Demo網(wǎng)盤下載(V_0.9.0)
Demo演示:
單Activity + 多Fragment,項(xiàng)目中有3個(gè)Demo。
流式的單Activity+多Fragment:
類似微信交互方式的單Activity+多Fragment:(全頁面支持滑動(dòng)返回)
類似新版仿知乎交互方式的單Activity+多Frgment:
Fragmentation
為"單Activity + 多Fragment的架構(gòu)","多模塊Activity + 多Fragment的架構(gòu)"而生,幫你簡(jiǎn)化使用過程,輕松解決各種復(fù)雜嵌套等問題,修復(fù)了官方Fragment庫存在的一些BUG。
特性
1、可以快速開發(fā)出各種嵌套設(shè)計(jì)的Fragment App
2、懸浮球/搖一搖實(shí)時(shí)查看Fragment的棧視圖Dialog,降低開發(fā)難度
3、增加啟動(dòng)模式、startForResult等類似Activity方法
4、類似Android事件分發(fā)機(jī)制的Fragment回退方法:onBackPressedSupport(),輕松為每個(gè)Fragment實(shí)現(xiàn)Back按鍵事件
5、提供onSupportVisible()等生命周期方法,簡(jiǎn)化嵌套Fragment的開發(fā)過程; 提供統(tǒng)一的onLazyInitView()懶加載方法
6、提供 Fragment轉(zhuǎn)場(chǎng)動(dòng)畫 系列解決方案,動(dòng)態(tài)更換動(dòng)畫
7、更強(qiáng)的兼容性, 解決多點(diǎn)觸控、重疊等問題
8、支持SwipeBack滑動(dòng)邊緣退出(需要使用Fragmentation_SwipeBack庫,詳情README)
如何使用
1. 項(xiàng)目下app的build.gradle中依賴:
// appcompat-v7包是必須的
compile 'me.yokeyword:fragmentation:{version}'
// 如果不想繼承SupportActivity/Fragment,自己定制Support,可僅依賴:
// compile 'me.yokeyword:fragmentation-core:{version}'
// 如果想使用SwipeBack 滑動(dòng)邊緣退出Fragment/Activity功能,完整的添加規(guī)則如下:
compile 'me.yokeyword:fragmentation:{version}'
// swipeback基于fragmentation, 如果是自定制SupportActivity/Fragment,則參照SwipeBackActivity/Fragment實(shí)現(xiàn)即可
compile 'me.yokeyword:fragmentation-swipeback:{version}'
2. Activity繼承SupportActivity:
// v1.0.0開始,不強(qiáng)制繼承SupportActivity,可使用接口+委托形式來實(shí)現(xiàn)自己的SupportActivity
public class MainActivity extends SupportActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(...);
// 棧視圖等功能,建議在Application里初始化
Fragmentation.builder()
// 顯示懸浮球 ; 其他Mode:SHAKE: 搖一搖喚出 NONE:隱藏
.stackViewMode(Fragmentation.BUBBLE)
.debug(BuildConfig.DEBUG)
...
.install();
if (findFragment(HomeFragment.class) == null) {
loadRootFragment(R.id.fl_container, HomeFragment.newInstance()); // 加載根Fragment
}
}
3. Fragment繼承SupportFragment:
// v1.0.0開始,不強(qiáng)制繼承SupportFragment,可使用接口+委托形式來實(shí)現(xiàn)自己的SupportFragment
public class HomeFragment extends SupportFragment {
private void xxx() {
// 啟動(dòng)新的Fragment, 另有start(fragment,SINGTASK)、startForResult、startWithPop等啟動(dòng)方法
start(DetailFragment.newInstance(HomeBean));
// ... 其他pop, find, 設(shè)置動(dòng)畫等等API, 請(qǐng)自行查看WIKI
}
}