温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 5 Fragment

第五章:手机平板要兼顾,探究Fragment

Fragment是一种可以嵌入Activity当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间。

> 本章实践知识较多,理论知识较少

Fragment生命周期

Fragment的状态

1.运行状态:当一个Fragment所关联的Activity处于运行状态时,该Fragment也处于运行状态。
2.暂停状态:当一个Fragment所关联的Activity处于暂停状态时,该Fragment也处于暂停状态。
3.停止状态:当一个Fragment所关联的Activity处于停止状态时,该Fragment也处于停止状态,或者调用FragmentTransaction的remove()、replace()方法将Fragment从Activity中移除,但在事务提交之前调用了addToBackStack()方法,这时该Fragment也将处于停止状态。总的来说,在这一状态的Fragment是完全不可见的,有可能会被系统回收。
4.销毁状态:Fragment总是依附于Activity存在,当一个Fragment所关联的Activity处于销毁状态时,该Fragment也处于销毁状态,或者调用FragmentTransaction的remove()、replace()方法将Fragment从Activity中移除,但在事务提交之前没有调用addToBackStack()方法,这时该Fragment也将处于销毁状态。

Fragment的回调

onAttach():当Fragment与Activity建立关联时调用
onCreateView():为Fragment创建视图(加载布局的时候调用)
onActivityCreated():与Fragment关联的Activity创建完毕时调用
onDestroyView():当与Fragment关联的视图被移除时调用
onDetach():当Fragment与Activity解除关联是调用

在这里插入图片描述

Fragment用法

系统内置的android.app.Fragment和Androidx库中的Fragment有什么区别?

前者在9.0版本已被废弃,后者可以使Fragment的特性在所有Android系统版本中保持一致。

动态添加Fragment的步骤

①创建待添加Fragment的实例
②获得其FragmentManager: getSupportFragmentManager()
③开启一个事务: beginTransaction()
④向容器内添加或替换Fragment: replace(容器id, Fragment实例)
⑤提交事务: commit()

在Fragment中实现返回栈

FragmentTransaction提供了一个addToBackStack()方法,用于将一个事务添加到返回栈中。

Fragment与Activity的交互

在Fragment中,可以调用getActivity()方法来得到和当前Fragment相关联的Activity实例;

if(activity!=null){
	val mainActivity = activity as MainActivity
}	

在Activity中,可以调用FragmentManager的findFragmentById()方法来得到相应的Fragment实例。

val fragment = supportFragmentManager.findFragmentById(R.id.leftFrag) as leftFrag

val fragment = leftFrag as leftFrag

当然,Fragment和Fragment可以通过Activity作为介质实现交互。

保存数据

在Fragment中也可以通过onSaveInstanceState()方法来保存数据,因为进入停止状态的Fragment有可能在系统不足的时候被回收。保存下来的数据可以在onCreate()、onCreateView()、onActivityCreated()这三个方法中重新得到。

动态加载布局的技巧

使用限定符

在res下新建layout-large文件夹,并在其中完成布局文件的编写。这里的large就是限定符,那些屏幕被认为是large的设备就会自动加载layout-large文件夹下的布局,小屏幕设备则还是会加载layout文件夹下的布局。

在这里插入图片描述

使用最小宽度限定符

最小宽度限定符允许我们对屏幕的宽度指定一个最小值(以dp为单位),然后以这个最小值为临界点,屏幕大于这个值的设备就加载这个布局,屏幕小于这个值的设备就加载另一个布局。
在res下新建layout-sw600dp文件夹,并在其中完成布局文件的编写。

猜你喜欢

转载自blog.csdn.net/qq_45254908/article/details/107441780