Fragment 为什么成为第五大组件
Fragment 为什么成为第五大组件
四大组件:Activity、Service、Broadcast Receiver、Content Provider
Fragment 具有生命周期,使用广泛
Fragment 加载到 Activity 的两种方式
- xml 通过 fragment 标签引入的方式
- code 中动态添加
FragmentPagerAdapter 和 FragmentStatePagerAdapter
- FragmentPagerAdapter 的 destroyItem 的时候并没有直接销毁 item,只是分离了 UI
- FragmentStatePagerAdapter 是直接销毁了 Fragment
- Fragment 多的时候选择 FragmentStatePagerAdapter,少的时候选择 FragmentPagerAdapter
Fragment 的生命周期
Framgnet 之间的通信
- Fragment 通过 getActivity 获取到 Activity
- Fragment 实现接口,Activity 通过接口来管理
- 两个 Fragment 之间通过广播来传输数据
- 使用事件总线传递数据
Framgnt 管理器:FragmentManger
如何获取 FragmentManger
- Activity 中通过 getSupportFragmentManager 获取
- Fragment 中通过 getChildFragmentManager 获取
常用方法
- add 添加一个 Fragment 实例
- remove 移除一个 Fragment 实例
- replace 替换一个 Fragment 实例
ViewPager 加载 Fragment 如何实现页面可见再加载数据
ViewPager 是默认缓存 1 的 pager,也就是默认加载隔壁的 Fragment。而 mOffscreenPageLimit 这是默认为 1 的,且 setOffscreenPageLimit 传入的数据小于 1 也会默认赋值为 1。以下是两种实现方式:
从 ViewPaer
- 重写整个 ViewPager,将 mOffscreenPageLimit 赋值为 0
- 通过反射获取 mOffscreenPageLimit 的值,然后进行赋值
从 Fragment
- 定义 isCreate 变量默认为 false
- 在 onCreate 方法中赋值为 true
- 重写 setUserVisibleHint 方法,代码如下
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser && isCreate) {
isCreate = false
// todo you something
}
}
- ViewPager 的 mOffscreenPageLimit 设置为 mFragments 的大小
- 需要注意:第 0 个 Framgnet 不能使用上面的方法,需要特殊处理,onCreate 中判断 Fragment 的下标赋值 isCreate 的值
如何获得 Fragment 的实例
- 保留空构造方法,否则会在某些情况下抛出错误:make sure class name exists, is public, and has an empty constructor that is public
- 不要直接不要直接通过 new 的方式获取,应该使用:newInstance 方式来获取,以下是 kotlin 示例:
companion object {
/**
* 获取PartyBillHandledFragment的实例
*/
fun newInstance(): PartyBillHandledFragment {
val args = Bundle()
val fragment = PartyBillHandledFragment()
fragment.arguments = args
return fragment
}
}
startActivityForResult 之坑
- 在 Fragment 中请勿使用 getActivity().startActivityForResult(),这样 Framgnet 中的 onActivityResult 是接收不到回调,而是回调 Activity 的 onActivityResult。
- 正确的应该是直接使用 startActivityForResult()方法
- requestCode 请勿传-1
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于