Android学习笔记——Fragment

来源:互联网 发布:知乎课程的定义 编辑:程序博客网 时间:2024/04/30 02:00

Fragment概述

  • Fragment,英文意思为“片段”,是Android 3.0(API 11)引入的新API, Fragment代表了Activity的子模块,Fragment必须被嵌入 用,同Activity类似, 它也拥有自己的生命周期!(异步刷新,教室学生分组)
  • 引入Fragment的初衷是为了适应大屏幕的平板电脑。由于平板电脑的屏 幕比手机屏幕更大,因此可以容纳更多的UI组件,开发者使用Fragment 对UI组件进行分组、模块化管理,可以更方便地在运行时过程中动态更 新Activity的用户界面。

注:Fragment特点是片段调用和模块复用,此类似HTML的FrameSet!

Activity 中可以调用 FragmentManager中的findFragmentById() 或者findFragmentByTag(),来获得Fragment,同时还可调用 add() remove() replace()去删除或者替换Fragment

注意一个Activity可以有多个Fragment,一个Fragment也可以被多个Activity使用

Fragment生命周期要受 Activity的生命周期也控制


Fragment的生命周期

  • 一共11个方法,根据需要选择性的重写指定方法,最常见的就是onCreateView()
  • 与Activity比较几个特殊的方法
    • onAttach(): 添加到Activity时被回调,与之相对的有onDetach()方法。
    • onCreateView():每次创建的View片段,与之相对的有onDestoryView()方法。
    • onActivityCreated():当Fragment所在的Activity被启动完成后回调该方法
  • 虽然Fragment也拥有自己的生命周期,但Fragment的生命周期会受它所 在Activity的生命周期控制。例如,当Activity暂停时,该Activity内的所有 Fragment都会暂停;当Actvity被销毁时,该Activity内的所有Fragment都 会被销毁。只有当该Activity处于活动状态时,程序员可通过方法独立地操作Fragment。
    生命周期示意图

创建Fragment

  • 与创建Actvity类似,实现的Fragment必须继承Fragment(或Fragment的子 类),且都需要实现与Activity类似的回调方法,例如onCreate()、 onCreateView()、onStart()、onResume()、onPause()、onStop()等等。通 常来说,创建Fragment通常需要实现如下三个方法:
    • onCreate():
      系统创建Fragment对象后回调该方法,实现代码中初始化想在Fragment 中保持的必要组件,当Fragment被暂停或者停止后可以恢复
    • onCreateView():
      当Fragment绘制界面组件时会回调该方法。该方法必须返回一个View, 该View也就是该Fragment所显示的View
    • onPause():
      当用户离开该Fragment时将会回调该方法

注:几个常见子类:DialogFragment、ListFragment、PreferenceFragment

  • 将创建的Fragment添加到Activity
    为了在Activity中显示Fragment,还必须将Fragment添加到Activity中。将 Fragment添加到Activity中有如下两种方式:
    • 在布局文件中使用

管理Fragment和处理Fragment事务

  • 管理Fragment
    Activity管理Fragment主要依靠FragmentManager对象,FragmentManager 对象可以通过getFragmentManager()获得:

    • 使用findFragmentById()或findFragmentByTag()方法来获取Fragment
    • 调用popBackStack()方法将Fragment从后台栈中弹出(模拟用户按下 BACK按键)(查看备注)
    • 调用addOnBackStackChangeListener()注册一个监听器,用户监听后台 栈的变化
    • 如需添加、删除、替换Fragment,则需要借助于FragmentTransaction对 象,FragmentTransaction代表Activity对Fragment执行的多个改变
    //主要Activity.java   FragmentOne.java    FragmentTwo.java    FragmentThree.java  ,都有一个输入框(默认输入一个值)和一个点击按钮,    按钮用于one-->two-->three跳转。//主界面跳转到one的时候:正常跳转FragmentManager fm = getFragmentManager();  FragmentTransaction tx = fm.beginTransaction();  tx.add(R.id.id_content, new FragmentOne(),"ONE");  tx.commit(); //one到two的时候:  注意是 repalce并且加入了回退栈,不加,再按回退键会直接退出当前activityFragmentTwo fTwo = new FragmentTwo();  FragmentManager fm = getFragmentManager();  FragmentTransaction tx = fm.beginTransaction();  tx.replace(R.id.id_content, fTwo, "TWO");  tx.addToBackStack(null);  tx.commit();//two到Three的时候:注意是添加不是替换,同时加入回退栈。记住每一次都要修改输入框的值FragmentThree fThree = new FragmentThree();  FragmentManager fm = getFragmentManager();  FragmentTransaction tx = fm.beginTransaction();  tx.hide(this);  tx.add(R.id.id_content , fThree, "THREE");  tx.addToBackStack(null);  tx.commit();  //Three--》two:发现修改过的值  还在//two--》one   发现修改过的值不在了//推论出:    repalce  ==  remove+ add

替换Fragment及事务处理的示例

java
Fragment rightFragment = new RightFragment();
// 开启事务
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
// 执行替换
fragmentTransaction.replace(R.id.right_fragment, rightFragment);
// 将事务添加到back栈,允许用户按BACK按钮回到替换Fragment前的状态
fragmentTransaction.addToBackStack(null);
// 提交事务
fragmentTransaction.commit();


Fragment与Activity通信

  • Fragment与Activity交互
    *Fragment获取它所在的Activity:
    调用Fragment的getActivity()方法即可返回它所在的Activity。
    • Activity获取它所包含的Fragment:
      调用Activity关联的FragmentManager的findFragmentById(int id)或 findFragmentByTag(String tag)方法获取
  • 除此之外,Fragment与Activity可能还需要相互传递数据
    • Fragment向Activity传递数据:
      在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实 现该回调接口,这样Fragment即可调用该回调方法将数据传给Activity
    • Activity向Fragment传递数据:
      在Activity中创建Bundle数据包,并调用Fragment的setArgument(Bundle
      bundle)方法即可将Bundle数据包传给Fragment
    • Fragmeng向Fragment传递数据(结合第1)和第2)步)

github实例源码:https://github.com/mikelkl/FragmentTest

预览图:

预览图

0 0
原创粉丝点击