Fragment 笔记

简介

碎片、片段,Fragment 的翻译可以让人直观的了解到它设计的思路和用法。
Android 3.0 以上。


from google develop
from google develop

生命周期及相关方法

  • onAttach(Activity)

Fragment和Activity建立关联的时候调用。

  • onCreate(Bundle)

系统会在创建片段时调用此方法。您应该在实现内初始化您想在片段暂停或停止后恢复时保留的必需片段组件。

  • onCreateView(LayoutInflater, ViewGroup, Bundle)

系统会在片段首次绘制其用户界面时调用此方法。 要想为您的片段绘制 UI,您从此方法中返回的 View 必须是片段布局的根视图。如果片段未提供 UI,您可以返回 null。

  • onActivityCreated(Bundle)

当Activity中的onCreate方法执行完后调用。

  • onPause()

系统将此方法作为用户离开片段的第一个信号(但并不总是意味着此片段会被销毁)进行调用。 您通常应该在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。

onDestroyView方法:Fragment中的布局被移除时调用。
onDetach方法:Fragment和Activity解除关联的时候调用。

运行一下程序,可以看到打印日志如下:

出自 [郭霖大神的 CSDN](http://blog.csdn.net/guolin_blog/article/details/8881711)

这时点击一下home键,打印日志如下:

出自 [郭霖大神的 CSDN](http://blog.csdn.net/guolin_blog/article/details/8881711)

如果你再重新进入进入程序,打印日志如下:

出自 [郭霖大神的 CSDN](http://blog.csdn.net/guolin_blog/article/details/8881711)

然后点击back键退出程序,打印日志如下:

出自 [郭霖大神的 CSDN](http://blog.csdn.net/guolin_blog/article/details/8881711)

Fragment 的创建

简单的 Fragment 可以通过重写 onCreateView() 方法来实现。

onCreateView(LayoutInflater inflater, ViewGroup container,BundlesavedInstanceState) 

一般使用该方法返回一个 View 对象提供给 Activity ,
所以在这里加载 xml 布局文件,参数中,
container :参数是布局将插入到的父ViewGroup(来自 Activity 的布局)
savedInstanceState :在恢复 Frafment 时,提供上一片段实例相关数据的 Bundle
inflater : 可以用来获取 xml 文件的控件。

View view = inflater.inflate(R.layout.activity_news_two,container,false);
ListView newslistView=(ListView) view.findViewById(R.id.show_news);
//ListView newslistView = (ListView) getActivity().findViewById(R.id.show_news);
//getActivity() 获取的对象可以用来获取同一个 Activity 上不同的 Fragment 的控件。

inflate 方法的三个参数:
xml 文件的ID;
将作为扩展布局父项的 ViewGroup 对象。传递 container对系统向扩展布局的根视图(由其所属的父视图指定)应用布局参数具有重要意义;
指示是否应该在扩展期间将扩展布局附加至 ViewGroup(第二个参数)的布尔值。

Activity 与 Fragment

  • 动态添加、删除 Fragment

获取 FragmentTransaction 对象

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container,fragment);//添加到的地方
//fragmentTransaction.remove(fragment);
//fragmentTransaction.replace();
//fragmentTransaction.hide();
//fragmentTransaction.show();
fragmentTransaction.commit();
  • 两者的通信
  • 事务栈

调用 addToBackStack(),以将事务添加到片段事务返回栈。 该返回栈由 Activity 管理,允许用户通过按返回按钮返回上一片段状态

transaction.add(R.id.fragment_container,fragment);
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);//

transaction.commit();

点击返回的时候,上面的操作会被全部撤销。
而且这些操作还可以通过setTransition()设置过度动画

setTransition

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,638评论 25 708
  • Fragment 为何产生 同时适配手机和平板、UI和逻辑的共享。 介绍 Fragment也会被加入回退栈中。 F...
    程慕枫阅读 415评论 1 0
  • 片段 Fragment表示 Activity中的行为或用户界面部分。您可以将多个片段组合在一个 Activity ...
    岳小川阅读 843评论 0 3
  • 「大数据」这个概念从2012年开始被广泛传播,尤其是近两年,各大公司,不仅仅是互联网公司,都在谈论它。「大数据」的...
    littlehei阅读 1,566评论 8 24
  • 没想到十字路口又摆在了面前,选哪一条,要想好,更需要自制力,还有气力。下一秒发生什么,没人知道,我的未来是什么,我...
    澔澔阅读 172评论 0 0