Android面试题库 - Fragment(一) - 基础

简介: Fragment为什么成为第五大组件Fragment为什么成为第五大组件四大组件:Activity、Service、Broadcast Receiver、Content ProviderFragment具有生命周期,使用广泛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的生命周期

img_9775c572c621d806b121dd809cd03fb0.jpe
Fragment生命周期
img_d921740c2bda339e6de3692f70907386.jpe
Activity生命周期对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
目录
相关文章
|
1月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
78 6
|
30天前
|
Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
30天前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
|
30天前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
1月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
27 3
|
1月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
19 3
|
1月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
25 2
|
1月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
53 1
|
1月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
39 1
|
1月前
|
存储 缓存 网络协议
5个Android性能优化相关的深度面试题
本文涵盖五个Android面试题及其解答,包括优化应用启动速度、内存泄漏的检测与解决、UI渲染性能优化、减少内存抖动和内存溢出、优化网络请求性能。每个问题都提供了详细的解答和示例代码。
28 2

热门文章

最新文章

下一篇
无影云桌面