Activity之Fragment

一、Fragment生命周期

Activity之Fragment_第1张图片
Fragment的生命周期

Fragment的生命周期和Activity的生命周期非常像,比Activity多了onAttach()、onCreateView()、onActivityCreate、onDestroyView、onDetach方法

  • onAttach方法是在和Activity建立连接的时候调用的,并返回绑定的Activity,一般可以做像this.mActivity=activity操作
  • onCreateView当Fragment加载布局时候用的
    -onActivityCreate是当托管的Activity的被创建的时候被调用的
  • onDetroyView销毁视图的时候会被调用,但是此时还未和Activity解除绑定,可通过onCreateView恢复,一般是在ViewPager+Fragment的时候使用。
  • onDetach当与Activity解绑的时候使用

Fragment的生命周期是由Activity的FragmentManager的管理的并不是由系统管理的

推荐阅读Fragment不为人知的细节

二、静态加载Fragment

(1)用法简介
  • 继承Fragment类,可以重写onAttach,onCreate,onCreateView等方法
  • 在Activity的布局文件中声明自己定义的Fragment
(2)代码示例

Fragment代码

public class AFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saveInstanceState){
     View view=inflater.inflate(R.layout.a_fragment_layout,parent);
     return view;
    }
}

布局文件代码


    

运行结果
Activity之Fragment_第2张图片
静态加载

三、动态加载

(1)用法说明
  • 继承Fragment类,实现onAttach,onCreate,onCreateView等方法
  • 通过getSupportFragmentManger获取FragmentManager对象
  • 通过LayoutManager的beginTranscation获取FragmentTransaction对象
  • 通过FragmentTransaction对象的add方法加载Fragment,replace方法切换Fragment,需要传进去父容器的id和Fragment的对象
    -可以通过FragmentTransaction的addToBackFragment()方法允许通过返回键返回上一个Fragment
  • 最后一定要调用Fragment Transaction的commit方法
(2)代码示例

AFragment(BFragment一样)

public class AFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saveInstanceState){
        View view=inflater.inflate(R.layout.a_fragment_layout,null);
        return view;
    }
}

Activity中的代码

public class MainActivity extends AppCompatActivity {
    FragmentTransaction transaction;
    FragmentManager manager;
    private static final String A_FRAGMENT="1";
    private static final String B_FRAGMENT="2";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        manager=getSupportFragmentManager();

}
    public void click1(View v){
        transaction=manager.beginTransaction();
        Fragment fragment=manager.findFragmentByTag(A_FRAGMENT);
        if(fragment==null){
         fragment=new AFragment();
         transaction.replace(R.id.parent1,fragment,A_FRAGMENT);
         transaction.commit();
     }
    }
    public void click2(View v){
        transaction=manager.beginTransaction();
        Fragment fragment=manager.findFragmentByTag(B_FRAGMENT);
        if(fragment==null){
            fragment=new BFragment();
            transaction.replace(R.id.parent1,fragment,B_FRAGMENT);
            transaction.commit();
        }
    }
}
运行效果
Activity之Fragment_第3张图片
点击AFragment按钮切换到AFragment

四、Fragment+ViewPager

几篇讲解:

  • 5.2.4 Fragment实例精讲——底部导航栏+ViewPager滑动切换页面 | 菜鸟教程
  • Fragment+ViewPager懒加载
  • 手把手讲解 ViewPager懒加载
  • 当Fragment遇上ViewPager

你可能感兴趣的:(Activity之Fragment)