Contents
  1. 1. 2015/11/18 9:34:20
    1. 1.0.1. Fragment知识点总结
  2. 1.1. 定义Fragment的方式
  3. 1.2. 区别
  4. 1.3. 应用
  5. 1.4. 动态:
  6. 1.5. 静态:
  • 2. 2015/11/18 9:40:21
    1. 2.0.1. 关于Fragment的回退栈
  • 3. 2015/11/18 9:41:09
    1. 3.0.1. Fragment之间通信
  • 4. 2015/11/18 9:41:32
    1. 4.0.1. Fragment 切换、嵌套则会报错
  • 5. 2015/11/18 9:43:31
    1. 5.1. Activity传值给Fragment
      1. 5.1.1. 方法一
      2. 5.1.2. 方法二
  • 6. 2015/11/18 9:46:37
    1. 6.1. Activity与 ViewPager 里Fragment的交互
  • 2015/11/18 9:34:20

    Fragment知识点总结

    定义Fragment的方式

    • 动态
    • 静态

    区别

    • 在主布局文件中定义不同

    主Activity必须继承FragmentActivity

    • 静态:主布局文件里定义 一个fragment控件

    • 动态:主布局文件里定义一个布局(用来装Fragment的容器),例如LinearLayout

    应用

    • 标题栏通常用静态定义、 内容通常用动态定义

    动态:

    1. 创建一个xml布局文件,里面包含Fragment要显示的控件
    2. 创建一个java文件 继承Fragment(导入V4包),重写onCreateView方法
      (所有控件都在这使用,MainActivity就用来调用Fragment),加载上述xml文件
      最后返回view,而不是返回之前的布局

    3. Activity布局文件 创建一个LinearLayout,设置ID,用于装载Fragment,name属性是上述文件的路径名

    4. MainActivity文件里

    A.通过getSupportFragmentManager()方法获得一个FragmentManager  
    B.用manager对象 通过beginTransaction方法开启事务,返回FragmentTransaction对象  
    C.创建一个MyFragment对象  MyFragment mFragment= new MyFragment(); (必须判断是否为空)  
    D.利用事务对象 跟上述定义个布局加载该Fragment transaction.add(Activity里布局的id,Fragment对象)  
    E.提交事务 transaction.commit();
    

    静态:

    定义好java文件,然后在主布局文件里 创建fragment控件即可,name属性是该java文件的路径名

    如何取得fragment里的控件?

    1. 在写好的java文件里 重写onActivityCreated
    2. 通过getActivity()方法获得上下文

    2015/11/18 9:40:21

    关于Fragment的回退栈

    1. 只要加入到回退栈就能回退,主显示Fragment不回退
      addToBackTrack(null)

    2. 事务的replace 会删除数据,若要保存上个Fragment的数据 ,先隐藏hide,再添加add

    3. 调用getFragmentManager.popBackStack()方法 可以返回上一个Fragment

    2015/11/18 9:41:09

    Fragment之间通信

    通过getActivity()方法获取Fragment对应Activity里的控件的ID。

    2015/11/18 9:41:32

    Fragment 切换、嵌套则会报错

    Duplicate id 0x7f0c0069, tag null, or parent id 0x0 with another fragment for gdpc.erintrus.bnj_project.TitleFoundFragment

    解决方法:
    onCreateView下面使用下列代码

    if (view != null) {
    ViewGroup parent = (ViewGroup) view.getParent(); 
    if (parent != null)
    parent.removeView(view); 
    }else{
        //数据初始化
    view = inflater(R.layout.xx,container,false);
    }
    
    return view;
    

    2015/11/18 9:43:31

    Activity传值给Fragment

    方法一

    1. 在Activity中定义一个字段,生成get、set方法
    2. 在Fragment中通过get方法获取

      private String mTitle;
      public String getmTitle() {
      return mTitle;
      }
      
      public void setmTitle(String title) {
      this.mTitle = title;
      }
      ((DemoActivity)getActivity()).getmTitle();
      

    方法二

    • 通过构造函数传递值

    2015/11/18 9:46:37

    Activity与 ViewPager 里Fragment的交互

    1. 在创建Fragment的Adapter里 获取该Fragment的控件
    2. 通过Fragment实例的getView和findViewById获取控件
    TextView tv = (TextView) introductionFragment.getView().findViewById(R.id.tvIntroductionContent); 
    tv.setText(schoolBasicInfo.getIntroduct());
    

    .参考TrainingAgencyAdapter

    Contents
    1. 1. 2015/11/18 9:34:20
      1. 1.0.1. Fragment知识点总结
    2. 1.1. 定义Fragment的方式
    3. 1.2. 区别
    4. 1.3. 应用
    5. 1.4. 动态:
    6. 1.5. 静态:
  • 2. 2015/11/18 9:40:21
    1. 2.0.1. 关于Fragment的回退栈
  • 3. 2015/11/18 9:41:09
    1. 3.0.1. Fragment之间通信
  • 4. 2015/11/18 9:41:32
    1. 4.0.1. Fragment 切换、嵌套则会报错
  • 5. 2015/11/18 9:43:31
    1. 5.1. Activity传值给Fragment
      1. 5.1.1. 方法一
      2. 5.1.2. 方法二
  • 6. 2015/11/18 9:46:37
    1. 6.1. Activity与 ViewPager 里Fragment的交互