01. 碎片
- 碎片是可以嵌入在活动当中的 UI 片段,轻量迷你的活动。
- 使用 support-v4 库中的
Fragment
作为基类。在 Android 4.2 系统中才开始支持在Fragment
中嵌套使用Fragment
。 - 在
build.gradle
文件中添加了 appcompat-v7 库的依赖,这个库会将 support-v4 库也一起引入进来。
02. 静态使用
继承并添加布局
/** * 继承 Fragment 并填充布局 * * @author JustDo23 */ public class LeftFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// 简单加载布局 View rootView = inflater.inflate(R.layout.fragment_simple_left, container, false); return rootView; } }
在布局文件中使用
Fragmet
<fragment android:id="@+id/frag_left" android:name="com.just.first.chapter04.LeftFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" />
代码关键点
- 标签使用
<fragment />
- 属性使用
android:name="all_name"
并制定全部路径名称 - 属性
android:id="frag_id"
是必须要有的否则会崩溃
- 标签使用
03. 动态使用
布局文件
<FrameLayout android:id="@+id/fl_bottom" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/holo_orange_dark" />
碎步切换代码
/** * 切换 Fragment 操作 * * @param fragment 新的碎片 */ private void replaceFragment(Fragment fragment) { FragmentManager supportFragmentManager = this.getSupportFragmentManager();// 获取碎步管理类 FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();// 获取碎片管理事务 fragmentTransaction.replace(R.id.fl_bottom, fragment);// 进行替换 fragmentTransaction.commit();// 事务提交 }
动态加载碎片5个步骤
- 创建待添加的碎步实例
- 通过
this.getSupportFragmentManager()
方法获取FragmentManager
实例 - 通过
fragmentManager.beginTransaction()
方法开启一个事务
- 使用
fragmentTransaction.replace()
指定位置及碎片进行动态添加 - 最后通过
fragmentTransaction.commit()
方法提交事务以完成动态添加
碎片模拟返回栈
添加完碎片后按下返回键就直接退出了。在
commit()
方法之前执行以下代码来模拟返回栈。fragmentTransaction.addToBackStack(null);// 字符串参数用于描述返回栈状态
04. 碎片和活动通信
在 Activity 中通过
FragmentManager
获取LeftFragment leftFragment = (LeftFragment) getSupportFragmentManager().findFragmentById(R.id.frag_left);
在 Fragment 中直接调用
getActivity();
方法FragmentActivity activity = this.getActivity();
05. 碎片生命周期
- 生命周期函数
- onAttach()
- 当 Fragment 与 Activity 建立关联时候调用
- onCreate()
- onCreateView()
- 为 Fragment 加载布局
- onActivityCreated()
- 确保与 Fragment 相关联的 Activity 一定已经创建完毕的时候调用
- onStart()
- onResume()
- onPause()
- onStop()
- onDestroyView()
- 当与 Fragment 相关联的视图被移除的时候调用
- onDestroy()
- onDetach()
- 当 Fragment 与 Activity 解除关联的时候调用
- onAttach()
- 静态加载时 Activity 及 Fragment 生命周期
- 动态加载时 Activity 及 Fragment 生命周期
- 调用
addToBackStack
方法对 Fragment 生命周期的影响
06. 碎片生命周期图
07. 动态加载技巧
使用限定符
- 在
res
目录下创建与layout
目录平级的文件夹layout-large
- 在
layout
目录和
layout-large
目录下创建同名的布局文件 - 两个布局文件虽然同名但是布局内容不同
- 分别在手机和平板上运行才能看到实现的效果
其中
large
就是一个限定符
,程序运行在类似平板这种large
屏幕的设备上会自动加载layout-large
目录下的布局。- 在
使用最小宽度限定符
- 在
res
目录下创建layout-sw600dp
目录
最小宽度限定符 Smallest-width Qualifier 允许我们对屏幕指定一个最小值,以 dp 为单位,然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局。
- 在
08. 小结
- 关于
Activity
与Fragment
之间交互的总结。 - 熟练
Fragment
的各个生命状态及生命周期。 - 注意
Activity
+Fragment
详细的生命周期。 - 经常开发手机版应用可以接触一下
平板
开发。