方便構建單Activity+多Fragment輕量級框架:FragmentStack
一個封裝了啟動模式的Fragment便捷使用庫,方便構建單Activity+多Fragment輕量級框架。
使用說明:
一 為什么要寫這個庫
1.Fragment創建速度完勝Activity,在長期的開發實踐中,明顯感覺到Fragment響應速度,內存占用等方面擁有巨大的優勢,將頁面fragment化有助于提升app流暢度;
2.fragment創建和使用相比Activity更加麻煩,其中,回退棧管理,動畫,關閉,隱藏等不便于使用,需要進一步封裝提升效率;
3.fragment缺少啟動模式,使得管理起來很有難度,很多在Activity上很常見的需求在Fragment使用需要更多更復雜的技巧,不利于快速開發;
二 它能為你做什么
1.替代傳統的Activity頁面,輕量化頁面;
2.開啟,關閉,動畫,回退棧,生命周期回調等操作更加方便,一行代碼即可搞定;
3.自帶Activity四種啟動模式,接管了系統的回退棧,很常見的場景,如 用戶中心--->注冊用戶--->注冊成功--->返回原來的用戶中心,就可以設置啟動模式為singleTask,注冊成功后退出當前任務棧,或者設置用戶中心singleInstance,直接new創建后再onNewInstance()方法中更新數據即可,框架自動remove上層fragment;
三 配置和開始使用
對于如何導入,也是相當的簡單,android studio的用戶,直接:
compile 'com.mrwang.Fragmenttack:stacklibrary:1.0.0'
然后,在你的項目中,MainActivity繼承RootActivity
public class MainActivity extends RootActivity {
@Override
protected RootFragment getRootFragment() {
return new HomeFragment();
}
@Override
public void onCreateNow(Bundle savedInstanceState) {
setAnim(R.anim.next_in, R.anim.next_out, R.anim.quit_in, R.anim.quit_out);
}
}</pre>
Fragment繼承RootFragment
public class HomeFragment extends RootFragment{
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
}
}</pre>
接下來,可以自由方便的使用Fragment了;
四 API說明
1.打開一個新的Fragment;
常規方式
open(new Fragment());
帶參形式
open(new Fragment());
在新Fragment中用Bundle bundle = getArguments();獲取
帶啟動模式形式,支持四種啟動模式(實際項目中以singleTask最為實用);
open(new Fragment1(), null, StackManager.STANDARD);
open(new Fragment1(), null, StackManager.SINGLE_TOP);
open(new Fragment1(), null, StackManager.SINGLE_TASK);
open(new Fragment1(), null, StackManager.SINGLE_INSTANCE);
關閉當前的fragment
close()
關閉指定的Fragment
close(fragment)
設置頁面切換動畫
setAnim(R.anim.next_in, R.anim.next_out, R.anim.quit_in, R.anim.quit_out);
進入下一個頁面,兩個頁面的回調,只需重寫
private void onNowHidden() {
}
private void onNextShow() {
}</pre>
Fragment獲取依賴的Activity
RootActivity root = getRoot();
singleTop,fragment被重復創建的回調
@Override
public void onNewIntent() {
} 若需要監聽按鍵事件,只需設置sKeyCallBack
setKeyCallBack(new KeyCallBack() {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return false;
}
});
</div>
</div>