Android学习笔记之Fragment

来源:互联网 发布:网络电台软件下载 编辑:程序博客网 时间:2024/05/21 09:33

Android学习笔记之Fragment

本笔记作为个人学习及反思使用,大部分内容为经大牛博客及官方文档借鉴后的总结,如果部分内容有侵权或不适的请联系博主解决。

1.Fragment介绍

  • 个人理解:Fragment的作用偏向于将Activity中的组件分组管理,并赋予不同的生命周期,就像把屏幕中内容以块分割。每一块的内容置于独立的类中,即利于管理、减少代码的臃肿又方便产品的迭代。

2.回调方法

回调方法 说明 onAttach() 当Fragment与Activity发生关联时调用。 onCreateView(LayoutInflater, ViewGroup,Bundle) 创建该Fragment的视图 onActivityCreated(Bundle) 当Activity的onCreate方法返回时调用 onDestoryView() 与onCreateView想对应,当该Fragment的视图被移除时调用 onDetach() 与onAttach相对应,当Fragment与Activity关联被取消时调用

(除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现)

3.基本使用方法

  • a.静态使用

    把Fragment当做普通控件使用

    1.新建一个类继承Fragment,并新建一个该Fragment的布局文件

    package com.project.fragments;public class Class_Fragment extends Fragment  {  @Override  public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)  {      return inflater.inflate(R.layout.layout_fragment, container, false);    }  }  

    2.在布局中直接引用该布局即可

    <Fragment    android:id="@+id/id_fragment_1"    android:name="com.project.fragments.Class_Fragment"    android:layout_width="fill_parent"    android:layout_height="45dp" />
  • b.动态使用

    1.主布局使用FrameLayout

    <FrameLayout    android:id="@+id/frame_main_1"  android:layout_width="fill_parent"    android:layout_height="fill_parent"  />

    2.两个Fragmen页面

    public class Class_Fragment_tab1 extends Fragment  {  @Override  public View onCreateView(LayoutInflater inflater, ViewGroup container,          Bundle savedInstanceState)  {      return inflater.inflate(R.layout.layout_Tab1, container, false);  }  }  

    “`java
    public class Class_Fragment_tab2 extends Fragment
    {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState)
    {
    return inflater.inflate(R.layout.layout_Tab2, container, false);
    }

    }

    #### 3.动态使用    ``` java       public class MainActivity extends Activity implements OnClickListener        {            private LinearLayout layout_Tab1;            private LinearLayout layout_Tab2;              private Class_Fragment_tab1 class_Tab1;            private Class_Fragment_tab2 class_Tab2;           @Override            protected void onCreate(Bundle savedInstanceState)        {          super.onCreate(savedInstanceState);          requestWindowFeature(Window.FEATURE_NO_TITLE);          setContentView(R.layout.activity_main);          // 初始化控件和声明事件          layout_Tab1 = (LinearLayout) findViewById(R.id.tab_1);          layout_Tab2 = (LinearLayout) findViewById(R.id.tab_2);          layout_Tab1.setOnClickListener(this);          layout_Tab2.setOnClickListener(this);          // 设置默认的Fragment          setDefaultFragment();        }        //默认的Fragment        private void setDefaultFragment()          {            FragmentManager fm = getFragmentManager();            FragmentTransaction transaction = fm.beginTransaction();            class_Tab1 = new Class_Fragment_tab1();            transaction.replace(R.id.frame_main_1, class_Tab1);            transaction.commit();          }          @Override          public void onClick(View v)          {            FragmentManager fm = getFragmentManager();            // 开启Fragment事务            FragmentTransaction transaction = fm.beginTransaction();            switch (v.getId())            {              case R.id.tab_1:                if (class_Tab1 == null)                {                  class_Tab1 = new Class_Fragment_tab1();                }                // 使用当前Fragment的布局替代frame_main_1的控件                transaction.replace(R.id.frame_main_1, class_Tab1);                break;              case R.id.tab_2:                if (class_Tab2 == null)                {                  class_Tab2 = new Class_Fragment_tab2();                }                transaction.replace(R.id.frame_main_1, class_Tab2);                break;            }            // transaction.addToBackStack();            // 事务提交            transaction.commit();          }        }  

4.Fragment API

常用的三个类

android.app.Fragment 主要用于定义Fragmentandroid.app.FragmentManager 主要用于在Activity中操作Fragmentandroid.app.FragmentTransaction 保证一些列Fragment操作的原子性,熟悉事务这个词,一定能明白~
  • getFragmentManager() 获取FragmentManage的方式
FragmentManager fm = getSupportFragmentManager();//v4包中FragmentManager fm = getFragmentManager();//v7包中
  • FragmentTransaction
FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
  • transaction.add()

      往Activity中添加一个Fragment
  • transaction.remove()
    从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。
  • transaction.replace()
    使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
  • transaction.hide()
    隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
  • transaction.show()
    显示之前隐藏的Fragment
  • transaction.detach()
    会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
  • transaction.attach()
    重建view视图,附加到UI上并显示。
  • transatcion.commit()
    //提交一个事务
原创粉丝点击