Fragment使用

作者: brant_feeboo | 来源:发表于2017-02-06 17:35 被阅读0次

    我们可以把fragment想象成activity中一个模块化的部分,它拥有自己的生命周期,接收自己的输入事件,可以在acvitity运行过程中添加或者移除(有点像"子activity",可以在不同的activity里面重复使用)。

    Note:如果APP的最低API版本是11或以上,则不必使用Support Library。

    创建一个Fragment类

    创建一个fragment,首先需要继承Fragment类,然后在关键的生命周期方法中插入APP的逻辑,就像activity一样。

    必须重写onCreateView()回调方法来定义布局。

    一、用XML将fragment添加到activity

    当屏幕被认为是large(用目录名称中的large字符来区分)时,它在布局中增加了两个fragment.

    Notes:FragmentActivity是Support Library提供的一个特殊activity ,用于处理API11版本以下的fragment。如果我们APP中的最低版本大于等于11,则可以使用普通的Activity

    如果用的是v7 appcompat library,activity应该改为继承ActionBarActivity,ActionBarActivity是FragmentActivity的一个子类(更多关于这方面的内容,请阅读Adding the Action Bar)。

    Note:当通过XML布局文件的方式将Fragment添加进activity时,Fragment是不能被动态移除的。

    二、灵活动态添加 Fragment

    FragmentManager类为在activity运行时对fragment进行添加,移除,替换等操作提供了方法,来实现动态的用户体验。

    在activity运行时添加fragment

    为了执行fragment的增加或者移除操作,必须通过FragmentManager创建一个FragmentTransaction对象, FragmentTransaction提供了用来增加、移除、替换以及其它一些操作的APIs。

    我们应该在activity的onCreate()方法中添加初始化。

    在布局中必须有一个容器View,动态添加fragment。

    为了替换fragment,这个Activity的布局包含了一个空的FrameLayout作为fragment的容器。

    在activity中,用Support Library APIs调用getSupportFragmentManager()方法获取FragmentManager对象,然后调用beginTransaction()方法创建一个FragmentTransaction对象,然后调用add()方法添加一个fragment.

    可以使用同一个FragmentTransaction进行多次fragment事务。完成这些变化操作,准备开始执行改变时,必须调用commit()方法。

    替换Fragment

    替换fragment的过程类似于添加过程,只需要将add()方法替换为replace()方法。

    记住在执行fragment事务时,如移除或者替换,我们经常要适当地让用户可以向后导航与"撤销"这次改变。为了让用户向后导航fragment事务,我们必须在FragmentTransaction提交前调用addToBackStack()方法。

    Note:当移除或者替换一个fragment并把它放入返回栈中时,被移除的fragment的生命周期是stopped(不是destoryed).当用户返回重新恢复这个fragment,它的生命周期是restarts。如果没有把fragment放入返回栈中,那么当它被移除或者替换时,其生命周期是destoryed。

    addToBackStack()方法提供了一个可选的String参数为事务指定了一个唯一的名字。除非打算用FragmentManager.BackStackEntryAPIs来进行一些高级的fragments操作,这个名字不是必须的。

    三、Fragments之间的交互

    定义一个接口

    为了让fragment与activity交互,可以在Fragment 类中定义一个接口,并在activity中实现。Fragment在他们生命周期的onAttach()方法中获取接口的实现,然后调用接口的方法来与Activity交互。

    实现接口

    为了接收回调事件,宿主activity必须实现在Fragment中定义的接口。

    传消息给Fragment

    宿主activity通过findFragmentById()方法获取fragment的实例,然后直接调用Fragment的public方法来向fragment传递消息。

    源地址:http://wiki.jikexueyuan.com/project/android-training-geek/communicating.html

    相关文章

      网友评论

        本文标题:Fragment使用

        本文链接:https://www.haomeiwen.com/subject/tycuittx.html