2 被称为第5大组件的Fragment(Android校招复习)

1 Fragment为什么被称为“第五大组件”及使用场景?

  • 为什么Fragment被称为“第五大组件”?
    答:因为Fragment在使用频率上不输于其它四大组件,同时拥有自己的生命周期。

  • Fragment的使用场景?
    答:1.Fragment最初的目的就是为了在平板等大屏幕上更好的展现UI而设计的,UI的切换效果更佳舒适。2.Fragment比Activity消耗更少的内存,因此在需要多个界面的情况下优先使用Fragment。

2 Fragment生命周期

2.1 Fragment生命周期图

在这里插入图片描述
Fragment各生命周期的方法的意义:
onStart()、onResume()、onPause()、onStop ()、onDestory()方法的与Activity中类似,就不浪费篇幅了、只总结Activity之中没有的生命周期方法。

  • onAttach()
    当Fragment与Activity绑定后调用,此时已经可以在Fragment通过getActivity()获取到与之绑定的Activity了。
  • onCreate()
    与Activity类似,但此时Activity还没有被创建,此方法只用来创建Fragment。
  • onCreateView()
    表示Activity要获取Fragment的View,返回的View必须是Fragment的跟视图,通过LayoutInflater获得View并返回给Activity。
  • onViewCreated()
    表示Fragment的界面已经完全绘制完成了,可以初始化Fragment中的控件资源。
  • onActivityCreated()
    表示Activity已经创建完成,在Activity的onCreate()方法执行完成之后调用此方法。
  • onDestoryView()
    表示正在移除Fratment的View。
  • onDetatach()
    表示正在与Activity解除绑定。

注:当Activity进入running状态后,Activity才能够自由的增加、删除、替换Fragment,这时它的生命周期才能独立运转,其余时期都是依赖于Activity的生命周期的。

2.2 Fragment从启动到销毁的全过程图。

在这里插入图片描述

3 Fragment的使用

3.1 Fragment加载到Activity的两种方式

3.1.1 静态加载

Fragment静态加载很简单,就是将Fragment作为一个View添加到XML文件中就可以了,和其他控件一样使用就好了,平时开发也用的很少,我没有用过静态加载在项目中过。

3.1.2 动态加载

		//第一步:获取FragmentTransation实例
		FragmentManager fm = getFragmentManager();
        FragmentTransaction tx = fm.beginTransaction();
        
		//第二步:用add()方法添加Fragment实例
        Fragment fragment = new xFragment();
        tx.add(fragment, "xFragment");
        
		//第三步:用commit()方法提交事务
		tx.commit();

PS:getFragmentManager()用于android.app.Fragment包,getSupportFragmentManager()用于android.support.v4.app.Fragment包。

3.2 Fragment + ViewPager结合使用

//第一步:初始化ViewPager 
ViewPager mViewPager = findViewById(R.id.viewpager)

//第二部:初始化Fragment集合
LinkedHashMap<String, Fragment> fragments = new LinkedHashMap<>();
fragments.put("水果", new xFragment());
fragments.put("蔬菜", new xFragment());
fragments.put("大米", new xFragment());

//第三步:设置PagerAdapter
MyPagerAdapter mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), fragments);
mViewPager.setAdapter(mPagerAdapter );
mViewPager.setCurrentItem(0);

3.3 FragmentPagerAdapter与FragmentStatePagerAdapter的区别?

答:FragmentPagerAdatper适用于页面较少的情况,
FragmentStatePagerAdapter适用于页面较多的情况。
因为在两个Adapter底层的destoryItem方法中,FragmentPagerAdapter是移除Fragment用的是FragmentTransation的detach()方法,只是去除了Fragment和Activity的关联,Fragment还在FragmentManager管理中,而FragmentStatePagerAdapter用的是FragmentTransation的remove()方法,真正的释放了Fragment的内存。

4 Fragment之间的通信

4.1 Fragment调用Activity中的方法

通过getActivity()方法获取实例即可

4.2 Activity调用Fragment中的方法

通过接口回调的方式实现

4.3 Fragment调用另一Fragment中的方法

通过FragmentManager中的findFragmentById()或findFragmentByTag()方法即可获得另一个Fragment


注:以上内容是由自己从互联网收集整理、自己写、及看书、看视频等总结出来的笔记,如果借鉴的内容需要标识出来请私信我。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值