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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Mario游戏-低调大师作品
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- 设置Eclipse缩进为4个空格,增强代码规范
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境