Android 部分 Fragment 篇

1.Fragment 为什么会被称为第五大组件?
        Android 中的 4 大组件为: Activity Broadcast Service ContentProvider ,那么为什么
Fragment 可以称之为第 5 大组件呢?你可以这么回答:
        因为 Fragment 有生命周期,使用频率不输于 4 大组件,可灵活加载到 Activity 中。然
后谈论谈论 Fragment 如何加载到 Activity
1.1 Fragment 加载到 Activity 的 2 种方式
        Fragment 加载到 Activity 的方式分为静态加载和动态加载,下面我们看看这两种加载方
式:
        静态加载: 直接在 Activity 布局文件中指定 Fragment 。使用指定属性 name 即可,代码
如下所示:
1. <fragment
2. android:name="com.example.myfragment.MyFragment"
3. android:id="@+id/myfragment_1"
4. android:layout_width="wrap_content"
5. android:layout_height="wrap_content"/>
        动态加载: 动态加载需要使用到 FragmentManager ,这种动态加载的方式在开发中是
非常常见的,示例代码如下:
1. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
2. //将 FragmentA 从容器中移除掉,减少内存的消耗
3. fragmentTransaction.remove(fragmentA);
4. fragmentTransaction.add(R.id.fragment_layout,new FragmentB());
5. fragmentTransaction.commit();
1.2 Fragment 与 ViewPager 的搭配使用
        通常情况下我们开发应用最常见的使用情况是 TabLayout+ViewPager+Fragment 的使用
方式,这就涉及到两个常用的适配器的使用,一个是 FragmentPagerAdapter ,另外一个是
FragmentStatePagerAdapter, 那么它们之间有什么区别呢?其实很简单,
FragmentPagerAdapter 适用于页面较少的情况,而 FragmentStatePagerAdapter 适用于页面
较多的情况。
2.Fragment 的生命周期
        Fragment 的生命周期面试的时候概率还是蛮大的,不过问的时候并不是单纯说整个生
命周期的回调函数等等,而是问些特殊情况下的 Fragment 的生命周期情况,为的是检验你
的开发经验,不过不用方,看看笔者推荐的一个链接,你会搞懂各种情况下的 Fragment
生命周期,这样面试就不用担心这种问题了:
Fragment
1.界面打开
onCreate() 方法执行!
onCreateView() 方法执行!
onActivityCreated() 方法执行!
onStart() 方法执行!
onResume() 方法执行!
2.按下主屏幕键/锁屏
onPause() 方法执行!
onStop() 方法执行!
3.重新打开
onStart() 方法执行!
onResume() 方法执行!
4.按下后退键
onPause() 方法执行!
onStop() 方法执行!
onDestroyView() 方法执行!
onDestroy() 方法执行!
onDetach() 方法执行!

Activity
1. 1. 打开应用
2. onCreate() 方法执行!
3. onStart() 方法执行!
4. onResume() 方法执行!
5.
6. 2. 按下主屏幕键/锁屏
7. onPause() 方法执行!
8. onStop() 方法执行!
9.
10. 3. 重新打开应用
11. onRestart() 方法执行!
12. onStart() 方法执行!
13. onResume() 方法执行!
14.
15. 4. 按下后退键
16. onPause() 方法执行!
17. onStop() 方法执行!
18. onDestroy() 方法执行!
开启一个带 Fragment Activity 的生命周期情况如下:
1. 打开
Fragment onAttach() 方法执行
Fragment onCreate() 方法执行!
Fragment onCreateView() 方法执行!
Fragment onViewCreated() 方法执行
Activity onCreate() 方法执行!
Fragment onActivityCreated() 方法执行!
Activity onStart() 方法执行!
Fragment onStart() 方法执行!
Activity onResume() 方法执行!
Fragment onResume() 方法执行!
2. 按下主屏幕键 / 锁屏
Fragment onPause() 方法执行!
Activity onPause() 方法执行!
Fragment onStop() 方法执行!
Activity onStop() 方法执行!
3. 再次打开
Activity onRestart() 方法执行!
Activity onStart() 方法执行!
Fragment onStart() 方法执行!
Activity onResume() 方法执行!
Fragment onResume() 方法执行!
4. 按下后退键
Fragment onPause() 方法执行!
Activity onPause() 方法执行!
Fragment onStop() 方法执行!
Activity onStop() 方法执行!
Fragment onDestroyView() 方法执行!
Fragment onDestroy() 方法执行!
Fragment onDetach() 方法执行!
Activity onDestroy() 方法执行!
3.Fragment 的通信
3.1 在 Fragment 中调用 Activity 中的方法
        在 Fragment 中调用 Activity 的方法很简单, Fragment 有个 getActivity() 的方法,比如,
MainActivity 中的一个 Fragment 中获取 MainActivity 的引用,并调用 MainActivity 的某个
方法 methodA() 方法你可以这么写:
1. MainActivity mainActivity = (MainActivity) getActivity();
2. ainActivity.methodA();
3.2 在 Activity 中调用 Fragment 的方法
Activity 中调用 Fragment 中的方法是最简单的,我想这里我不用多说吧!直接接口
回调即可调用 Fragment 的任何可访问的方法。
3.3 在 Fragment 中调用另外一个 Fragment 的方法
这个可就需要一定的思维性了,首先要想调用 Fragment A 的方法,除了这个 Fragment
A 自身可以调用外,这个 Fragment A 所属的 Activity 也可以调用,要想另外一个 Fragment
B 调用此 Fragment A 的方法, Fragment B 可以间接通过 Activity 来进行调用,也就是 3.1
3.2 的结合。看看下图你自然就会明白了:

 4.Fragment 的切换方式

Fragment 的切换方式分为 add()&remove(),hide()&show(),detach()&attach(),也许你会问

不是还有 replace() 方法吗?其实 replace() 其实是先调用了 remove() 然后再调用 add() 方法,
所以不算那三种其实之一。那么这三种方式有什么区别呢? add()&remove() 就是添加和移
除,因此 replace() 这个方法只是在上一个 Fragment 不再需要时采用的简便方法。而
hide()&show() 则是指隐藏和显示,这种方式防止 Fragment 多次创建实例对象,所以正确的
切换方式是 add() ,切换时 hide() add() 另一个 Fragment ;再次切换时,只需 hide() 当前,
show() 另一个,这样就能做到多个 Fragment 切换不重新实例化。那么 detach()&attach()
呢?使用 detach() 会将 view ViewTree 中删除 , remove() 不同 , 此时 Fragment 的状态依然
保持着 , 在使用 attach() 时会再次调用 onCreateView() 来重绘视图 , 注意使用 detach()
Fragment.isAdded() 方法将返回 false, 在使用 attach() 还原 Fragment isAdded() 会依然返回
false( 需要再次确认 ) 执行 detach() replace() 后要还原视图的话 , 可以在相应的 Fragment
保持相应的 view, 并在 onCreateView() 方法中通过 view parent removeView() 方法将
view parent 的关联删除后返回 , 这种方式极少使用,但是面试官文问的话,你如果答得
很全,那么面试官会眼前一亮的感觉。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值