Android学习笔记之Fragment

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.在布局中直接引用该布局即可

    
    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 主要用于定义Fragment
android.app.FragmentManager 主要用于在Activity中操作Fragment
android.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()
    //提交一个事务

你可能感兴趣的:(Android相关,android学习笔记)