Android Fragment简介

来源:互联网 发布:新激光雷达识别软件 编辑:程序博客网 时间:2024/05/07 01:44

Android Fragment简介


• 背景
在手机开发的时候设计的UI往往要兼顾手机和平板屏幕的尺寸充分利用屏幕的空间,碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,兼顾手机和平板的开发,自Android3.0版本就开始引进,解决手机、平板电脑等各种设备的适配问题;解决多个Activity之间切换性能问题,Activity像是个容器里面装载多个Fragment并对他们进行管理,当Activity销毁的时候其中的Fragment都被销毁;模块化,因为模块化导致复用的好处,Fragment在应用开发中用到的越来多应当足够的重视。

• 静态加载碎片
创建一个碎片类来继承Fragment并把布局动态的加载进来,这个Fragment建议使用support-4库。
如果你在Fragment的XML布局文件添加到Activity的XML布局文件,那么你无法在运行时移除这个Fragment。
通过的xml布局的方式将碎片显示到屏幕上,一般是不实用的,我们看一下流程:先创建一个xml布局文件frag_new.xml,再创建一个NewFragment类并继承Fragment,其中重写onCreateView()方法把碎片要加载的布局文件frag_new布局文件添加进去,上面的这个过程是创建碎片的最基本。
代码示例:

public class NewFragment extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.frag_new, container, false);    }

但是怎么将碎片显示或切换到Activity上呢?一种方法可以说是静态添加的方式,就是在Activity的xml布局文件中添加fragment标签如下:

    <fragment        android:id="@+id/fragLeft"        <!--要添加的碎片布局,以该类的包名形式添加-->        android:name="com.example.fragmenttest.NewFragment"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="1"/>

• 动态添加碎片
开发中如要实现碎片的交互还要使用动态加载碎片,动态使用就是向Fragment布局容器中动态添加、替换、移除、隐藏、显示Fragment。
FragmentManager类提供了在运行时(runtime)从活动中添加,移除,替换碎片的方法,这样可以创造一个动态的体验。这个过程是要FragmentManager来创建FragmentTransaction,利用它提供的API来进行添加、移除、替换(这些都是事务transaction)等。最后提交事务commit()来完成转换。
代码示例:

replaceFragment(new AnotherFragment());private void replaceFragment(Fragment newfragment) {        FragmentManager fragmentManager= getSupportFragmentManager();        FragmentTransaction transaction = fragmentManager.beginTransaction();        //right_layout是Activity活动布局中的一个嵌套布局的id,用来装载碎片        //经实验使用相对布局和帧布局合适        transaction.replace(R.id.right_layout, newfragment);        //将一个事务添加到返回栈        transaction.addToBackStack(null);        transaction.commit();    }

• 碎片返回栈

若回退键返回到上一个fragment可以使用FragmentTransaction提供的addToBackStack()方法将事务添加到返回栈中。

• 碎片的生命周期
1. 运行状态:它所关联的活动处于活动状态时,该碎片也处于活动状态
2. 暂停状态:当活动进入到暂停状态时(就是另一个为沾满屏幕的活动被添加到栈顶),相联可见碎片会进入到暂停状态。
3. 停止状态:活动停止碎片即停止,或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但有在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。(停止状态碎片不可见)
4. 销毁状态:依附活动的碎片,随活动销毁 与相关联的碎片进入销毁状态。或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,这时的碎片也会进入到销毁状态。

这里写图片描述
onCreate():系统创建Fragment对象后回调该方法,实现代码中只初始化想要在Fragment中保持的必要组件。
onCreateView():当Fragment绘制界面组件时回调该方法
onPause():当用户离开该Fragment时将会回调该方法

•onAttach():Fragment和Activity建立关联的时候调用。•onCreateView():为Fragment加载布局时调用。•onActivityCreated():当Activity中的onCreate方法执行完后调用。•onDestroyView():Fragment中的布局被移除时调用。•onDetach():Fragment和Activity解除关联的时候调用。

布局技巧:
使用限定符(Qualifiers):通常平板采用的双页模式,左边子项列表,右边显示内容。就是在res的文件夹下创建一个layout-large文件放置一个要显示的名字相同的xml文件,就是当在一个大的屏幕的设备上显示的时候就调用layout-large中的xml布局文件,文件夹名中的large就是一个限定符,这个可以更灵活的为不同设备加载布局,利用这个可以在手机与平板上显示单双页的页面。

• Fragment 与Activity通信
碎片是嵌入到活动显示的,但碎片和活动有各自是独立的,没有明显的方式直接通信。

活动中得到相应碎片的实例:OneFragment oneFragment = (OneFragment)getFragmentManager().findFragmentById(R.id.oneFragment);

碎片中调用活动里的方法:MainActivity activity= (MainActivity)getActivity();

0 0
原创粉丝点击