Android编程至高武学之《如来神掌》第三式~佛动山河
来源:互联网 发布:如何使用淘宝模板 编辑:程序博客网 时间:2024/04/29 14:55
上回书Android编程至高武学之《如来神掌》第二式~金顶佛灯 ,我已经把一个基本的android框架(demo)传授于大家了。当然有大神觉得low的,以后我会还大家一个公道:给你们弄一个复杂一点的框架(MVP+Dagger2+rxjava+retrofit),敬请期待...。目前这个虽然low点(其实不叫low,就是很直白而已),但是对于一般的开发足够了。今天我就先给大家分析下那个框架中的一个知识点:栈管理fragment。下面有请主角登场:
先上代码:
public class FragmentStack { //list模拟栈,将fragmnet放进栈里面管理 private ArrayList<ArrayList<Fragment>> stackList = new ArrayList<>(); private ArrayList<Fragment> stack; private CloseFragment listener; public FragmentStack() { if (stack == null) { stack = new ArrayList<>(); } stackList.add(stack); } //第一次将fragment加入栈,要保证栈内只有一个fragment。 public void firstPutStandard(Fragment fragment) { stack.clear(); stackList.get(stackList.size() - 1).add(fragment); } //普通标准模式方式入栈:直接加入就行。 public void putStandard(Fragment fragment) { stackList.get(stackList.size() - 1).add(fragment); } //singleTop模式入栈:栈顶唯一性 public boolean putSingleTop(Fragment fragment) { ArrayList<Fragment> lastList = stackList.get(stackList.size() - 1); if (lastList.isEmpty()) { lastList.add(fragment); return false; } else { Fragment last = lastList.get(lastList.size() - 1); if (last.getClass().getName().equals(fragment.getClass().getName())) {// fragment.onNewIntent(); BaseFragment rootFragment = (BaseFragment) fragment; rootFragment.onNewIntent(); return true; } else { lastList.add(fragment); return false; } } } //singleTask模式入栈:有且仅有一个fragment。 public boolean putSingleTask(Fragment fragment) { boolean isClear = false; ArrayList<Fragment> lastList = stackList.get(stackList.size() - 1); if (lastList.isEmpty()) { lastList.add(fragment); } else { int tempIndex = 0; for (int x = 0; x <= lastList.size() - 1; x++) { if (lastList.get(x).getClass().getName().equals(fragment.getClass().getName())) { //clear all instance isClear = true; tempIndex = x; break; } } if (!isClear) { lastList.add(fragment); } else { if (listener != null) { listener.show(lastList.get(tempIndex)); StackManager.isFirstClose = true; for (int i = lastList.size() - 1; i > tempIndex; i--) { listener.close(lastList.get(i)); } for (int j = lastList.size() - 1; j > tempIndex; j--) { lastList.remove(j); } } } } return isClear; } //singleInstance模式入栈:每次创建一个新的任务栈。 public void putSingleInstance(Fragment fragment) { ArrayList<Fragment> frags = new ArrayList<>(); frags.add(fragment); stackList.add(frags); } //回退操作的时候,移除当前fragment public void onBackPressed() { int i = stackList.size() - 1; if (i >= 0) { ArrayList<Fragment> lastStack = stackList.get(i); if (lastStack != null && (!lastStack.isEmpty())) { lastStack.remove(lastStack.size() - 1); if (lastStack.isEmpty()) { stackList.remove(lastStack); } } else { stackList.remove(lastStack); } } else { stackList.clear(); } } protected void setCloseFragmentListener(CloseFragment listener) { this.listener = listener; } //获取最后两个fragment:一个为当前fragment,一个为目标fragment(跳转或者回退) protected Fragment[] getLast() { Fragment[] fagArr = new Fragment[2]; boolean hasFirst = false; for (int x = stackList.size() - 1; x >= 0; x--) { ArrayList<Fragment> list = stackList.get(x); if (list != null && (!list.isEmpty())) { if (hasFirst) { fagArr[1] = list.get(list.size() - 1); break; } else { hasFirst = true; fagArr[0] = list.get(list.size() - 1); if (list.size() > 1) { fagArr[1] = list.get(list.size() - 2); } } } } return fagArr; }}
是不是so easy?简单粗暴,一看就懂。当然,如果您实在是不太理解,或者不怎么会用,那么请观看俺的上一篇博客Android编程至高武学之《如来神掌》第二式~金顶佛灯 。或者直接去下载demo,https://Git.oschina.NET/bjnq/NeiquanDemo,运行后里面直接有用法。
本回书完,下回还是分解一下上篇博客给大家贡献的demo,敬请期待.....
2 0
- Android编程至高武学之《如来神掌》第三式~佛动山河
- Android编程至高武学之《如来神掌》第五式~迎佛西天
- Android编程至高武学之《如来神掌》第二式~金顶佛灯
- Android编程至高武学之《如来神掌》第一式~佛光初现
- Android编程至高武学之《如来神掌》第四式~佛问迦蓝
- 《如来神掌》详细攻略
- 动手学Android之十三——动起来
- 《如来神掌》详细攻略2
- 《如来神掌》详细攻略3
- 编程的至高境界是什么?
- 如来
- Android天下大乱,Google无法一统山河
- 《0基础学Andorid编程》第三章
- linux编程之动起手来
- COM编程之五 动静态链接
- 趣学Python-教孩子学编程--第三章
- 野人学Android基础篇之初探UI控件第三课--Button
- 学编程学IT教程之ArrayList
- poj-【2431 Expedition】
- Python学习,Day3
- Bootstrap表格样式使用方法
- 设计模式深入学习--Interpreter 解释器模式(行为型模式)
- HTML5与移动端web学习笔记
- Android编程至高武学之《如来神掌》第三式~佛动山河
- PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用
- 【数据库原理】索引简介
- 39、Power Query-Text.Combine函数应用
- Bootstrap按钮元素使用方法
- S/4 HANA – 是ERP皇帝的新装,还是SAP王国的新基石
- Java中无参无返回值方法的使用
- 索引
- 哈理工OJ 1333GG的关心(01背包)