#单Activity+多Fragment设计(Fragmentation的使用)#

本文介绍使用Fragmentation库打造单Activity+多Fragment的App基础架构:
Fragmentation库提供了SupportActivity和SupportFragment两个基础类,通过分别继承这两个类,实现自己的业务。

  • Fragmentation的Github链接
    点此链接到Github

  • 导入依赖
// 在App级别的gradle中引入Fragment依赖
api 'me.yokeyword:fragmentation:1.2.7'
api 'me.yokeyword:fragmentation-swipeback:1.2.7'
  • 封装BaseFragment
    自定义BaseFragment继承自Fragmentation提供的SwipeBackFragment
    将BaseFragment改为抽象类,在具体业务中定义具体的页面Fragment时就继承这个类,实现它的抽象方法,传入布局,绑定视图。
public abstract class BaseFragment extends SwipeBackFragment{// 需要实现的设置layout的抽象方法public abstract setLayout();// 需要实现的绑定完界面之后的操作方法public abstract onBindView(@Nullable Bundle savedInstanceState, View rootView);@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){View rootView = null;if (setLayout() instanceof Integer){rootView = inflater.inflate((Integer)setLayout(), container, false);    }else if(setLayout() instanceof View){rootView = (View)setLayout();}else{throw new ClassCastException("type must be int or view");}onBindView(@Nullable savedInstanceState, View rootView);}// 返回唯一的Activity实例public final ProxyActivity getProxyActivity(){return (ProxyActivity)_mActivity;}
}
  • 封装ProxyActivity
    自定义ProxyActivity继承自Fragmentation提供的SupportActivity
    同样也是抽象类,用来绑定自定义的Fragement到界面上
public abstract class ProxyActivity extends SupportActivity{// 需要实现的设置Fragment的方法public abstract BaseFragment setRootFragment();@overrideprotected void onCreate(@Nullable Bundle saveInstanceState){super.onCreate(saveInstanceState);initContainer(saveInstanceState);}private void initContainer(@Nullable Bundle saveInstanceState){final ContentFrameLayout container = new ContentFrameLayout(this);// id要在res/vlues定义一个资源文件ids,再定义一个id值container.setId(R.id.fragment_container);setContentView(container);if (saveInstancesState==null){// 框架提供的绑定Fragment到Framelayout的方法loadRootFragment(R.id.fragment_container, setRootFragment());}}// 释放一些资源@Overrideprotected void onDestroy() {super.onDestroy();System.gc();System.runFinalization();}
}
  • 定义具体的MyFragment继承自BaseFragment
public class MyFragment extends BaseFragment{@overridepublic Object setLayout(){return R.layout.fragment_my;}@overridepublic void onBindView(@Nullable Bundle savedInstanceState, View rootView){}
}
  • 把定义的MyFragment嵌入唯一的MyActivity实例
public class MyActivity extends ProxyActivity{@overridepublic BaseFragment setRootFragment(){return new MyFragment();}
}
  • 其中Fragmentation中提供的跳转方法

装载根Fragment,即Activity内的第一个Fragment

 loadRootFragment(int containerId, SupportFragment toFragment)

同级Fragment场景下的切换(类似底部导航栏之间切换Fragment)

showHideFragment(SupportFragment showFragment, SupportFragment hideFragment);

启动Fragment的方法

// 启动新的Fragment,启动者和被启动者是在同一个栈的
start(SupportFragment fragment)// 以某种启动模式,启动新的Fragment
start(SupportFragment fragment, int launchMode)// 启动新的Fragment,并能接收到新Fragment的数据返回
startForResult(SupportFragment fragment,int requestCode)// 启动目标Fragment,并关闭当前Fragment
startWithPop(SupportFragment fragment)
  • 小结
    这样就可以定义多个自己业务的Fragment继承自BaseFragment,然后调用Fragmentation提供的方法,在唯一的实例Activity中进行跳转。
    根据慕课网课程总结得之

  • 基于这个框架的仿电商导航栏,多Fragment切换
    点此链接到下一篇文章

Android肝帝战纪之Fragmentation的使用(单Activity+多Fragment设计)相关推荐

  1. Android肝帝战纪之基于上篇单Activity+多Fragment框架,开发电商式导航栏,多Fragment切换

    电商式导航栏,多Fragment切换 本文默认在已经搭建好的框架上进行开发 点此链接到上一篇基础框架的搭建 界面构思示意图 设计思路 在底部的LinearLayout中添加相应的图标,然后设置tag绑 ...

  2. Android肝帝战纪之ObjectBox移动数据库框架探究与实现

    ObjectBox移动数据库框架 ObjectBox Github链接: 点击此处链接到Github 介绍 ObjectBox是移动端数据库框架,灵感来自于NoSql,速度非常快,号称是市面上最快的移 ...

  3. Android肝帝战纪之字体图标库(iconify)的简单使用

    字体图标库(iconify)的简单使用 本文介绍字体图标库简单的封装和使用(以集成Fontawesome为例): Iconify的GIithub链接 点此链接到Github 导入依赖 //在app级别 ...

  4. Android肝帝战纪之网络请求框架封装(Retrofit的封装)

    网络请求框架封装(OkHttp3+Retrofit+loading的封装) Retrofit的Github链接 点此链接到Github AVLoadingIndicatorView的Github链接( ...

  5. 云炬Android开发笔记 4单Activity界面架构设计与验证

    1.4-2本应用没有使用多个activity进行界面的展示,而是通过一个activity管理多个fragment来进行处理. fragment里面有很多坑,推荐使用开源库fragmentation. ...

  6. android 小卷毛播放器,Android 音乐播放器的开发教程(四)Activity和Fragment的通信以及Fragment的切换 ----- 小达...

    Activity和Fragment的通信以及Fragment的切换 在上一篇的博客中讲到了,播放器的主界面布局,是由一个activity和一个fragment构成的,activity启动的时候,在其o ...

  7. android 状态栏一体化 fragment,单Activity多Fragment动态修改状态栏颜色功能

    目录介绍 1.关于如何集成 2.关于如何使用 3.关于鸣谢 4.关于版本更新说明 5.关于其他介绍 0.说明 状态栏工具类,应该可以满足绝大多数的使用场景.具体可以参考代码案例,欢迎star!! 1. ...

  8. 赛尔号周五服务器维护大概到几点,赛尔号:每日玩多少小时算肝帝?2小时是菜鸟,大神:我24小时...

    赛尔号:每日玩多少小时算肝帝?2小时是菜鸟,大神:我24小时 大家好,说起赛尔号这款游戏,很多人都知道这是一个很耗费大家时间的游戏.因为它以肝闻名,以氪为辅,令得很多玩家爱不释手,也令得很多玩家纷纷退 ...

  9. 诸神战纪2java_诸神战纪2死神归来

    诸神战纪2死神归来是一款休闲益智类的游戏,像素的画风,玩家可以在游戏里面可以不断的完成很多的冒险任务不断的收集自己的武器和装备让自己变得强大.画风非常的具有特色,玩法非常简单,经典的剧情,丰富多样的玩 ...

最新文章

  1. Android SDK 路径修改
  2. 用python画四叶草代码-python turtle工具绘制四叶草的实例分享
  3. Iterator迭代器并发修改异常问题解决
  4. java开发程序员_Java大牛给入门Java开发程序员的10个学习建议
  5. bootstrap table footerFormatter用法 统计列求和 sum、average等
  6. 构建自己的PHP框架--构建缓存组件(2)
  7. flutter系列之flutter工程结构详解(android视角)
  8. 简述静态全局变量的概念 C++
  9. java添加录音,大家说说java程序里怎么插入视频和音频啊
  10. yagmail设置定时任务
  11. quartz mysql 配置_quartz的数据库配置
  12. acpi_hardware_id可以通过HID/CLD/UID/CLS/method/path获得
  13. vc830l 说明书_数字万用表vc830l视频教程 视频
  14. 初识app之产品需求分析文档设计
  15. 字体外面怎么加边框_CSS如何给字体加边框
  16. 微信小程序豆瓣电影学习知识总结
  17. 删除PDF其中几页的方法
  18. Matlab影像处理二
  19. LDA+U中U值的计算方法
  20. 经典IIR数字滤波器设计一般步骤的总结

热门文章

  1. 怎么更改當前的USERENV(#39;LANG#39;)返回值 oracle
  2. 令程序员泪流满面的瞬间
  3. 特大喜讯,uni-app支持PC版了!
  4. 设计一款给爸爸妈妈用的手机
  5. 夜神模拟器BURP抓包设置
  6. Android 页面跳转时发生双击导致app闪退的解决方案
  7. 分布式tensorflow测试代码
  8. 2017河南工业大学玲珑杯赛后总结
  9. 《绮梦朦胧,一眼浮生醉流年》
  10. android 蓝牙相关的类,Android中BluetoothAdapter类简介