Android面试题库 - Fragment(一) - 基础
程序员文章站
2022-04-12 21:30:04
...
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
上一篇: PHP_EOL使用 Apache Mina框架实践
下一篇: Hadoop面试题(待更新)
推荐阅读
-
Android编程使用Fragment界面向下跳转并一级级返回的实现方法
-
Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
-
Android编程使用Fragment界面向下跳转并一级级返回的实现方法
-
Android基础之使用Fragment控制切换多个页面
-
Android基础之使用Fragment适应不同屏幕和分辨率(分享)
-
Android基础之Fragment与Activity交互详解
-
java基础考试题及答案(大一java考试题库)
-
java基础考试题及答案(大一java考试题库)
-
我经历的一些Android面试题及答案
-
Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法