当前位置:主页 > 查看内容

Android学习笔记之探究碎片

发布时间:2021-05-20 00:00| 位朋友查看

简介:学习参考书第一行代码第2版 一、碎片及其使用方式 碎片fragment是一种可以嵌入在活动中的UI片段它能让程序更加合理和充分利用大屏幕的空间。碎片类似于活动同样能包含布局有自己的生命周期。 1碎片的简单用法 新建layout布局文件 新建绑定对应布局文件的类该……

(学习参考书:第一行代码第2版)

一、碎片及其使用方式

碎片(fragment)是一种可以嵌入在活动中的UI片段,它能让程序更加合理和充分利用大屏幕的空间。碎片类似于活动,同样能包含布局,有自己的生命周期。

(1)碎片的简单用法

  1. 新建layout布局文件
  2. 新建绑定对应布局文件的类,该类继承Fragment。在该类中重写onCreateView方法。
  3. 在要添加该碎片的活动中添加fragment控件,使用属性
    android:name显式指明要添加的碎片类名,要将包名也加上

(2)动态添加碎片
碎片的真正强大之处在于它可以在程序运行时动态的添加到活动中。步骤如下:

  1. 创建待添加的碎片实例
  2. 获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager()方法得到。
  3. 开启一个事务,通过调用beginTransaction()方法开启
  4. 向容器中添加或替换碎片,一般使用replace方法实现,需要传入容器的id和待添加的碎片实例
  5. 提交事务。调用commit()方法来完成

(3)在碎片中模拟返回栈
如果在动态添加/更改碎片后想通过Back键返回上一个碎片,即实现类似返回栈的效果。可以这样实现:
FragmentTransaction中提供了一个addToBackStack()方法,它可以用于将一个事务添加到返回栈中。

transaction.addToBackStack(null);

在事务提交前调用该方法,它可以接受一个名字用于描述返回栈的状态,一般传入null即可。

(4)碎片和活动间的通信
虽然碎片都是嵌入在活动中显式,但是碎片和活动都是各自存在于一个独立的类当中的,它们之间没有明显的方式直接进行通信。
为了方便碎片和活动之间进行通信,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例。代码如下:

MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.my_fragment);
(MyFragment是自定义的碎片类,my_fragment是碎片的布局文件。)

调用FragmentManager的findFragmentById()方法就可以在活动中获得相应实例,然后轻松调用碎片里的方法。
同样的,在每个碎片中通过调用getActivity()方法来得到和当前碎片相关的活动实例。

MainActivity activity = (MainActivity) getActivity();

当碎片需要使用Context对象时,也是使用该方法。
碎片与碎片间通信的方法就是通过中间活动实现。

二、碎片的生命周期

运行状态:当一个碎片可见并且它所关联的活动处于运行状态,该碎片也处于运行状态。

暂停状态:当一个活动进入暂停状态,与它相关联的可见碎片也会进入到暂停状态

停止状态:当一个活动进入停止状态,与其相关联的碎片会进入到停止状态。或者FragmentTransaction的remove(),replace()方法将碎片从活动中移除,但如果在事务提交之前使用addToBackStack()方法,这时的碎片也会进入停止状态。进入停止状态的碎片对用户完全不可见,有可能被系统回收

销毁状态:当一个活动进入销毁状态,与其相关联的碎片会进入到销毁状态。或者FragmentTransaction的remove(),replace()方法将碎片从活动中移除,但在事务提交之前并没有使用addToBackStack()方法,这时的碎片也会进入销毁状态。

Fragment类中提供了一系列的回调方法,以覆盖碎片生命周期的每个环节,活动中的回调方法碎片都有除此之外,碎片还有一部分附加的回调方法:

onAttach() 当碎片和活动建立联系时调用
onCreateView() 为碎片加载布局时调用
onActivityCreated() 确保与碎片相关联的活动一定已经创建完毕时调用
onDestoryView() 当与碎片关联的视图被移除的时候调用
onDetach() 当碎片和活动解除关系时调用

三、动态加载布局的技巧

为了满足在不同尺寸和分辨率设备上加载布局的不同,需要使用限定符来决定设备加载的布局文件。Android常见的限定符:
在这里插入图片描述
使用方法:在res目录下新建布局文件夹layout-Qualifier,这里的Qualifier对应上述的限定符,再在该文件夹下创建同名布局文件。

最小宽度限定符:在res目录下新建布局文件夹layout-swXXXdp,当程序运行到屏幕宽度大于XXX的设备时,会默认加载该文件夹下的布局文件。程序运行到屏幕宽度小于XXX的设备时,会默认加载普通的布局文件。

;原文链接:https://blog.csdn.net/YCF8746/article/details/115495502
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐