TabLayout+ViewPager+Fragment

TabLayout

Tablayout继承自HorizontalScrollView,用作页面切换指示器,因使用简便功能强大而广泛使用在App中。

TabLayout中如何让当前标签永远位于屏幕中间?

TabLayout如何设置指示器的宽度包裹内容?

https://www.jianshu.com/p/fde38f367019

tabMode有两种属性:fixed和 scrollable;fixed:指的是固定tab;scrollable指的是tab可滑动。

tabGravity有两种属性:center和fill;center指的是居中显示,fill指的是占满全屏。

viewPager

会缓存前后2个界面

FragmentPagerAdapter

FragmentStatePagerAdapter

Fragment如果在Adapter中使用应该如何解耦?

setOffscreenPageLimit(0)

https://blog.csdn.net/nicholas_nick/article/details/50461276

PagerAdapter闪屏坑的修复
https://www.jianshu.com/p/29b708c62b33

https://www.cnblogs.com/fuyaozhishang/p/7079151.html

使用PagerAdapter时,无法动态更新数据
https://blog.csdn.net/u013040434/article/details/71159784

Android Viewpager PagerAdapter update data 刷新界面数据
https://www.cnblogs.com/fansen/p/5577609.html

https://www.jianshu.com/p/266861496508

Fragment

轻量切换,解决activity间切换不流畅问题

commitAllowingStateLoss

fragment是依赖于activity的,不能独立存在

生命周期和activity绑定

Fragment——onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onPause->onStop->onDestroyView->onDestroy->onDetach

oncreateview()
inflate()

第三个参数是false,因为在fragment内部实现中,会把该布局添加到container中,如果设为true,那么会重复添加,会抛一吃

传参数要用setArguments()

因为在内存紧张导致fragment被系统杀死,并恢复时时能保留这些数据
不能用构造方法传值

onAttach()

将context对象强转为Activity对象

commit()操作是异步的

commitNow()
commitAllowingStateLoss()

add()

remove()

replace()

旧Fragment调用remove,新Fragment调用add

findFragmentByTag
回退栈BackStack

BackStackRecord类包含了一次事务的整个操作轨迹,以链表形式存在

Fragment 如何实现类似 Activity 栈的压栈和出栈效果的?
  • Fragment 的事物管理器内部维持了一个双向链表结构,该结构可以记录我们每次 add 的
  • Fragment 和 replace 的 Fragment,然后当我们点击 back 按钮的时候会自动帮我们实现退栈操作。
通信用eventbus
DialogFragment,代替Dialog

优点 即使旋转屏幕,也能保留对话框状态

Fragment 的好处
  • Fragment 可以使你能够将 activity 分离成多个可重用的组件,每个都有它自己的生命周期和UI。
  • Fragment 可以轻松的创建动态灵活的 UI 设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。
  • Fragment 是一个独立的模块,紧紧地与activity 绑定在一起。可以运行中动态地移除、加入、交换等。
  • Fragment 提供一个新的方式让你在不同的安卓设备上统一你的 UI。
  • Fragment 解决 Activity 间的切换不流畅,轻量切换。
如何切换 fragement,不重新实例化
  • 正确的切换方式是 add(),切换时 hide(),add()另一个 Fragment;
  • 再次切换时,只需 hide()当前, show()另一个
懒加载

setUserVisibleHint

Fragment 在 ViewPager 里面的生命周期,滑动 ViewPager 的页面时 Fragment 的生命周期的变化

Fragment/getSupportFragmentManager/FragmentTransaction

add():向Activity加入一个片段,这个片段在activity容器中有他自己的视图/FrameLayout。

hide():隐藏Fragment,已经添加到父容器中的Fragment有关,隐藏Fragment的View/FrameLayout。

show():显示被隐藏的Fragment,这仅仅对已经添加到activity中的Fragment有关,显示Fragment的View。

detach():Fragment的视图被销毁,但是它的状态没有被销毁,还是被FragmentMenager管理。

attach():Fragment的view重新加载到UI视图中,并显示,也就是执行onCreateView()→onActivityCreate()→onStart()→onResume()。

replace():就相当于执行remove(Fragment)→add(int, Fragment, String)这两个方法

setOffscreenPageLimit

一是 ViewPager 会预加载几页; 二是 ViewPager 会缓存 2*n+1 页(n为设置的值)。如设置为n=1,当前在第一页,会预加载第二页,滑倒第二页,会预加载第三页,当滑倒第三页,第一页会销毁,第四页会加载

ViewPager循环、自动滚动效果
https://blog.csdn.net/weixin_44339238/article/details/101761004

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值