1. 实际开发中应该选择系统内置的 android.app.Fragment
还是 support-v4 库中的 android.support.v4.app.Fragment
- 应该使用 support-v4 库中的
Fragment
。 - 因为它可以让
Fragment
在所有的 Android 系统版本中保持功能一致。比如说在Fragment
中嵌套使用Fragment
,这个功能是在 Android 4.2 系统中才开始支持的,如果使用系统内置的Fragment
,程序就会崩溃。 - 不需要在 build.gradle 文件中添加 support-v4 的依赖,因为 build.gradle 文件中已经添加了 appcompat-v7 库的依赖,这个库也会将 support-v4 库一并引入。
2. Fragment
的生命周期方法
onAttach()
: 当Fragment
和Activity
建立关联的时候调用onCreate()
onCreateView()
: 为Fragment
创建视图(加载布局)时调用onActivityCreated()
:确保与Fragment
相关联的Activity
一定已经创建完毕的时候调用onStart()
onResume()
onPause()
onStop()
onDestroyView()
: 当与Fragment
关联的视图被移除的时候调用onDestroy()
onDetach()
: 当Fragment
和Activity
解除关联的时候调用
3. Fragment
生命周期图
4. 写一个创建 Fragment
的 Demo
1 | public class MyFragment extends Fragment { |
5. Fragment
和 Activity
之间怎样通信
MyFragment myFragment = getFragmentManager().findFragmentById(R.id.my_fragment);
MainActivity mainActivity = (MainActivity) getActivity();
6. Android 中常见的限定符有哪些
大小
- small:提供给小屏幕设备的资源
- normal:提供给中等屏幕设备的资源
- large:提供给大屏幕设备的资源
- xlarge:提供给超大屏幕设备的资源
分辨率
- ldpi:提供给低分辨率设备的资源(120dpi 以下)
- mdpi:提供给中等分辨率设备的资源(120dpi ~ 160dpi)
- hdpi:提供给高分辨率设备的资源(160dpi ~ 240dpi)
- xhdpi:提供给超高分辨率设备的资源(240dpi ~ 320dpi)
- xxhdpi:提供给超超高分辨率设备的资源(320dpi ~ 480dpi)
方向
- land:提供给横屏设备的资源
- port:提供给竖屏设备的资源
7. 什么是最小宽度限定符(Smallest-width-Qualifier)
举例,使用 large 限定符,那些屏幕被认为是 large 的设备就会自动加载 layout-large 文件夹(需手动在 res 目录下创建)下的布局,而小屏幕的设备则还是会加载 layout 文件夹下的布局
- 但有一个问题,large 到底指多大我们并不确定,有时候我们希望可以更加灵活地为不同设备紧挨着布局,不管它们是不是被系统认为为 large,这时就可以使用最小宽度限定符(Smallest-width Qualifier)
最小宽度限定符允许我们对屏幕的宽度指定一个最小值(以 dp)为单位,然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局
- 比如,在 res 目录下新建 layout-sw600dp 文件夹,然后在这个文件夹下新建
activity_main.xml
布局,这就意味着,当程序运行在屏幕宽度大于 600dp 的设备上时,会加载layout-sw600dp/activity_main
布局;当程序运行在屏幕宽度小于 600dp 的设备上时,则仍然加载默认的layout/activity_main
布局
- 比如,在 res 目录下新建 layout-sw600dp 文件夹,然后在这个文件夹下新建