《第一行代码--Android》读书笔记之碎片

来源:互联网 发布:linux 查找内容 编辑:程序博客网 时间:2024/06/10 13:29

碎片的基本用法:

碎片(fragment)是能嵌在活动中的UI片段,相当于mini型的Activity,有完整的布局,和生命周期。

  • 一个简单的碎片的创建过程:
    • 新建一个碎片布局,比如,fragment.xml
    • 自定义一个继承自Fragment类的类,并重写onCreateView()方法,动态加载碎片布局。
    • 在被嵌入碎片的Activity的布局文件中加入< fragment>标签,要注意添加android:name属性来显式指明要添加碎片的类名,完整的包名不能省略。
      比较一下活动的创建过程也很类似,但不同的是Activity要在onCreate()方法中调用setContextView()方法来动态加载布局。
public class LeftFragment extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view=inflater.inflate(R.layout.left_fragment,container,false);        return view;    }}
  • 动态加载碎片

    • 同样地,创建碎片布局和自定义碎片类
    • 在待添加碎片的活动中添加一个布局作为碎片的容器,比如FrameLayout
    • 创建待添加的碎片类的实例
    • 在活动中获取FragmentManager,通过getFragmentManager()得到
    • 通过FragmentManager开始一个事务fragmentTransaction,fragmentManager.beginTransaction()
    • 利用FragmentTransaction replace(int containerViewId, Fragment fragment)方法向容器加入碎片
    • 在提交事务之前调用addToBackStack()方法,将事务添加到返回栈
    • 通过commit()方法提交事务
  • 碎片与活动间通信

    碎片和活动都是不同的类当中,所以它们之间的通信要借助一个媒介,这个桥梁就是上面所提到的的FragmentManager。

    • 在活动中要获得碎片的实例,可以通过FragmentManager.findFragmentById()从布局文件中获取碎片的实例,通过此碎片实例就可以调用碎片里的方法了。
    • 在碎片中要获得活动的实例,可以通过getActivity()方法来得到与当前碎片相关联的活动实例。
    • 碎片与碎片间的通信,可以通过它们共同关联的活动做媒介。
    RightFragment rightFragment=(RightFragment)getFragmentManager().findFragmentById(R.id.Right_Fragment);

碎片的生命周期

这里写图片描述
这里写图片描述这里写图片描述


  • onAttach()//当一个Fragment对象关联到一个Activity时调用。
  • onCreate()//初始创建Fragment对象时调用。
  • onCreateView()//创建与Fragment对象关联的View视图时调用,即加载fragment布局的时候调用。
  • onActivityCreated()//当Activity对象完成自己的onCreate方法时调用,确保与之关联的活动已被创建
  • onStart()//Fragment对象在ui可见时调用。
  • onResume()//Fragment对象的ui可以与用户交互时调用。
  • onPause()//Fragment对象可见,但不可交互。有Activity对象转为onPause状态时调用。
  • onStop()//有空间完全遮挡;或者宿主Activity对象转为onStop状态时调用。
  • onDestroyView()//Fragment对象清理view资源时调用,也就是移除fragment中的视图。
  • onDestroy()//Fragment对象完成对象清理View资源时调用。
  • onDetach()//Fragment对象与Activity对象解除关联时调用。

与活动类似,当位于返回栈的处于停止状态的碎片被系统回收,可以通过onSaveInstanceState()方法保存数据,再通过onCreate()或onCreateView()中的bundle参数获得保存下来的数据。

限定符

用限定符可以实现动态加载布局,在不同的设备或者同一设备的不同状态下加载不同的布局。
常用的Android限定符
- land 提供给横屏设备的资源
- port 提供给竖屏设备的资源
- small 提供给小屏幕设备的资源
- normal 提供给中等屏幕设备的资源
- large 提供给大屏幕设备的资源

参考查阅的资料和文献:
Fragment学习—–简介与生命周期研究 http://blog.csdn.net/qianfu111/article/details/8948110

0 0
原创粉丝点击