IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 部分 Fragment 篇 -> 正文阅读

[移动开发]Android 部分 Fragment 篇

1.Fragment 为什么会被称为第五大组件?
????????Android 中的 4 大组件为: Activity Broadcast Service ContentProvider ,那么为什么
Fragment 可以称之为第 5 大组件呢?你可以这么回答:
????????因为 Fragment 有生命周期,使用频率不输于 4 大组件,可灵活加载到 Activity 中。然
后谈论谈论 Fragment 如何加载到 Activity
1.1 Fragment 加载到 Activity 的 2 种方式
????????Fragment 加载到 Activity 的方式分为静态加载和动态加载,下面我们看看这两种加载方
式:
????????静态加载: 直接在 Activity 布局文件中指定 Fragment 。使用指定属性 name 即可,代码
如下所示:
1. <fragment
2. android:name="com.example.myfragment.MyFragment"
3. android:id="@+id/myfragment_1"
4. android:layout_width="wrap_content"
5. android:layout_height="wrap_content"/>
????????动态加载: 动态加载需要使用到 FragmentManager ,这种动态加载的方式在开发中是
非常常见的,示例代码如下:
1. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
2. //将 FragmentA 从容器中移除掉,减少内存的消耗
3. fragmentTransaction.remove(fragmentA);
4. fragmentTransaction.add(R.id.fragment_layout,new FragmentB());
5. fragmentTransaction.commit();
1.2 Fragment 与 ViewPager 的搭配使用
????????通常情况下我们开发应用最常见的使用情况是 TabLayout+ViewPager+Fragment 的使用
方式,这就涉及到两个常用的适配器的使用,一个是 FragmentPagerAdapter ,另外一个是
FragmentStatePagerAdapter, 那么它们之间有什么区别呢?其实很简单,
FragmentPagerAdapter 适用于页面较少的情况,而 FragmentStatePagerAdapter 适用于页面
较多的情况。
2.Fragment 的生命周期
????????Fragment 的生命周期面试的时候概率还是蛮大的,不过问的时候并不是单纯说整个生
命周期的回调函数等等,而是问些特殊情况下的 Fragment 的生命周期情况,为的是检验你
的开发经验,不过不用方,看看笔者推荐的一个链接,你会搞懂各种情况下的 Fragment
生命周期,这样面试就不用担心这种问题了:
Fragment
1.界面打开
onCreate() 方法执行!
onCreateView() 方法执行!
onActivityCreated() 方法执行!
onStart() 方法执行!
onResume() 方法执行!
2.按下主屏幕键/锁屏
onPause() 方法执行!
onStop() 方法执行!
3.重新打开
onStart() 方法执行!
onResume() 方法执行!
4.按下后退键
onPause() 方法执行!
onStop() 方法执行!
onDestroyView() 方法执行!
onDestroy() 方法执行!
onDetach() 方法执行!

Activity
1. 1. 打开应用
2. onCreate() 方法执行!
3. onStart() 方法执行!
4. onResume() 方法执行!
5.
6. 2. 按下主屏幕键/锁屏
7. onPause() 方法执行!
8. onStop() 方法执行!
9.
10. 3. 重新打开应用
11. onRestart() 方法执行!
12. onStart() 方法执行!
13. onResume() 方法执行!
14.
15. 4. 按下后退键
16. onPause() 方法执行!
17. onStop() 方法执行!
18. onDestroy() 方法执行!
开启一个带 Fragment Activity 的生命周期情况如下:
1. 打开
Fragment onAttach() 方法执行
Fragment onCreate() 方法执行!
Fragment onCreateView() 方法执行!
Fragment onViewCreated() 方法执行
Activity onCreate() 方法执行!
Fragment onActivityCreated() 方法执行!
Activity onStart() 方法执行!
Fragment onStart() 方法执行!
Activity onResume() 方法执行!
Fragment onResume() 方法执行!
2. 按下主屏幕键 / 锁屏
Fragment onPause() 方法执行!
Activity onPause() 方法执行!
Fragment onStop() 方法执行!
Activity onStop() 方法执行!
3. 再次打开
Activity onRestart() 方法执行!
Activity onStart() 方法执行!
Fragment onStart() 方法执行!
Activity onResume() 方法执行!
Fragment onResume() 方法执行!
4. 按下后退键
Fragment onPause() 方法执行!
Activity onPause() 方法执行!
Fragment onStop() 方法执行!
Activity onStop() 方法执行!
Fragment onDestroyView() 方法执行!
Fragment onDestroy() 方法执行!
Fragment onDetach() 方法执行!
Activity onDestroy() 方法执行!
3.Fragment 的通信
3.1 在 Fragment 中调用 Activity 中的方法
????????在 Fragment 中调用 Activity 的方法很简单, Fragment 有个 getActivity() 的方法,比如,
MainActivity 中的一个 Fragment 中获取 MainActivity 的引用,并调用 MainActivity 的某个
方法 methodA() 方法你可以这么写:
1. MainActivity mainActivity = (MainActivity) getActivity();
2. ainActivity.methodA();
3.2 在 Activity 中调用 Fragment 的方法
Activity 中调用 Fragment 中的方法是最简单的,我想这里我不用多说吧!直接接口
回调即可调用 Fragment 的任何可访问的方法。
3.3 在 Fragment 中调用另外一个 Fragment 的方法
这个可就需要一定的思维性了,首先要想调用 Fragment A 的方法,除了这个 Fragment
A 自身可以调用外,这个 Fragment A 所属的 Activity 也可以调用,要想另外一个 Fragment
B 调用此 Fragment A 的方法, Fragment B 可以间接通过 Activity 来进行调用,也就是 3.1
3.2 的结合。看看下图你自然就会明白了:

?4.Fragment 的切换方式

Fragment 的切换方式分为 add()&remove(),hide()&show(),detach()&attach(),也许你会问

不是还有 replace() 方法吗?其实 replace() 其实是先调用了 remove() 然后再调用 add() 方法,
所以不算那三种其实之一。那么这三种方式有什么区别呢? add()&remove() 就是添加和移
除,因此 replace() 这个方法只是在上一个 Fragment 不再需要时采用的简便方法。而
hide()&show() 则是指隐藏和显示,这种方式防止 Fragment 多次创建实例对象,所以正确的
切换方式是 add() ,切换时 hide() add() 另一个 Fragment ;再次切换时,只需 hide() 当前,
show() 另一个,这样就能做到多个 Fragment 切换不重新实例化。那么 detach()&attach()
呢?使用 detach() 会将 view ViewTree 中删除 , remove() 不同 , 此时 Fragment 的状态依然
保持着 , 在使用 attach() 时会再次调用 onCreateView() 来重绘视图 , 注意使用 detach()
Fragment.isAdded() 方法将返回 false, 在使用 attach() 还原 Fragment isAdded() 会依然返回
false( 需要再次确认 ) 执行 detach() replace() 后要还原视图的话 , 可以在相应的 Fragment
保持相应的 view, 并在 onCreateView() 方法中通过 view parent removeView() 方法将
view parent 的关联删除后返回 , 这种方式极少使用,但是面试官文问的话,你如果答得
很全,那么面试官会眼前一亮的感觉。
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:01:03  更:2022-01-24 11:01:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:49:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码