Android面试题库 - Fragment(一) - 基础
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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
android view 转Bitmap 生成截图
文章链接:https://mp.weixin.qq.com/s/FQmYfT-KYiDbp-0HzK_Hpw 项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将view 转成bitmap 再到图片分享,还有一种情况是将不可见的view 转成bitmap ,这种view是没有直接显示在界面上的,需要我们使用inflate 进行创建的view。 第一种 先看通过 DrawingCache 方法来截取普通的view,获取它的视图(Bitmap)。 private Bitmap createBitmap(View view) { view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap; } 这个方法适用于view 已经显示在界面上了,可以获得view 的宽高实际大小,进而通过DrawingCache 保存为bitmap。 第二种 但是 如果要截取的view 没有在屏幕上显示完全的,例如要截取的是超过一屏的 scrollview ...
-
下一篇
2-VIV-Android控件之res资源加载
零、前言 [1].本想在控件使用中穿插讲一下资源在加载,但感觉知识点挺多还是单开一篇专门讲一下吧。 [2].values/string.xml的使用 [3].values/dimens.xml的使用 [4].values/colors.xml的使用 [5].values/styles.xml的使用 [6].选择器selector的使用 [7].anim里xml动画加载 一、values/string.xml的使用 1.单字符串 <string name="title">张风捷特烈</string> //使用单字符串 setTitle(getResources().getString(R.string.title)); //xml里 android:text="@string/title" 定义string.png 2.字符串数组 <string-array name="coder"> <item>Java</item> <item>Python</item> <item>JavaScript...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL数据库在高并发下的优化方案
- Red5直播服务器,属于Java语言的直播服务器