这篇“Android面向单Activity开发实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android面向单Activity开发实例分析”文章吧。
记得前一两年很多人都跟风面向单Activity开发,顾名思义,就是整个项目只有一个Activity。一个Activity里面装着N多个Fragment,再给Fragment加上转场动画,效果和多Activity跳转无异。其实想想还比较酷,以前还需要关注多个Acitivity之间的生命周期,现在只需关注一个,但还是需要对Fragment的生命周期进行关注。
其实早在六七年前GitHub上就有单Activity的开源库Fragmentation,后来谷歌也出了一个库Navigation。本来以为官方出品必为经典,当时跟着官方文档一步一步踩坑,最后还是放弃了该方案。理由大概如下:
需要创建XML文件,配置导航关系和跳转参数等
页面回退是重新创建,需要配合livedata使用
貌似还会存在卡顿,一些栈内跳转处理等问题
而Github上Fragmentation库已经停止维护,所幸的是再lssuse中发现了一个基于它继续维护的SFragmentation,于是正是开启了面向单Activity的开发。
提供了可滑动返回的版本
dependencies { //请使用最新版本 implementation 'com.github.weikaiyun.SFragmentation:fragmentation:latest' //滑动返回,可选 implementation 'com.github.weikaiyun.SFragmentation:fragmentation_swipeback:latest' }
由于是Fragment之间的跳转,我们需要将原有的Activity跳转动画在框架初始化时设置到该框架中
Fragmentation.builder() //设置 栈视图 模式为 (默认)悬浮球模式 SHAKE: 摇一摇唤出 NONE:隐藏, 仅在Debug环境生效 .stackViewMode(Fragmentation.BUBBLE) .debug(BuildConfig.DEBUG) .animation( R.anim.public_translate_right_to_center, //进入动画 R.anim.public_translate_center_to_left, //隐藏动画 R.anim.public_translate_left_to_center, //重新出现时的动画 R.anim.public_translate_center_to_right //退出动画 ) .install()
因为只有一个Activity,所以需要在这个Activity中装载根Fragment
loadRootFragment(int containerId, SupportFragment toFragment)
但现在的APP几乎都是一个页面多个Tab组成的怎么办呢?
loadMultipleRootFragment(int containerId, int showPosition, SupportFragment... toFragments);
有了多个Fragment的显示,我们需要切换Tab实际也很简单
showHideFragment(ISupportFragment showFragment);
是不是使用起来很简单,首页我们解决了,关于跳转和返回、参数的接受和传递呢?
//启动目标fragment start(SupportFragment fragment) //带返回的启动方式 startForResult(SupportFragment fragment,int requestCode) //接收返回参数 override fun onFragmentResult(requestCode: Int, resultCode: Int, data: Bundle?) { super.onFragmentResult(requestCode, resultCode, data) } //返回到上个页面,和activity的back()类似 pop()
对于单Activity而言,我们其实也可以注册一个全局的Fragment监听,这样就能掌控当前的Fragmnet
supportFragmentManager.registerFragmentLifecycleCallbacks( object : FragmentManager.FragmentLifecycleCallbacks() { override fun onFragmentAttached(fm: FragmentManager, f: Fragment, context: Context) { super.onFragmentAttached(fm, f, context) } override fun onFragmentCreated( fm: FragmentManager, f: Fragment, savedInstanceState: Bundle? ) { super.onFragmentCreated(fm, f, savedInstanceState) } override fun onFragmentStarted(fm: FragmentManager, f: Fragment) { super.onFragmentStarted(fm, f) } override fun onFragmentResumed(fm: FragmentManager, f: Fragment) { super.onFragmentResumed(fm, f) } override fun onFragmentDestroyed(fm: FragmentManager, f: Fragment) { super.onFragmentDestroyed(fm, f) } }, true )
接下来我们看看Pad应用。对于手机应用来说,一般不会存在局部页面跳转的情况,但是Pad上是常规操作。
如图,点击左边列表的单个item,右边需要显示详情,这时候再点左边的其他item,此时的左边页面是保持不动的,但右边的详情页需要跳转对应的页面。使用过Pad的应该经常见到这种页面,比如Pad的系统设置等页面。这时只使用Activty应该是不能实现的,必须配合Fragment,左右分为两个Fragment。
但问题又出现了,这时候点击back怎么区分局部返回和整个页面返回呢?
//整个页面回退,主要是用于当前装载了Fragment的页面回退 _mActivity.pop() //局部回退,被装载的Fragment之间回退 pop()
如下图,这样的页面我们又应该怎么装载呢?
可以分析,页面最外面是一个Activty,要实现单Activity其内部必装载了一个根Fragment。接着这个根Fragment中使用ViewPage和tablayout完成主页框架。当前tab页要满足右边详情页的单独跳转,还得将右边页面作为主页面,以此装载子Fragment才能实现。
以上就是关于“Android面向单Activity开发实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。