Android部分-7:Fragment

《Android Fragment 非常详细的一篇》

1.Android中v4包下Fragment和app包下Fragment的区别是什么?

v4 包下的Fragment是兼容到Android1.6版本的。

2.Fragment的生命周期 & 请结合Activity的生命周期再一起说说。

onAttach onCreate onCreateView onActivityCreate onStart onResume onPause onStop onDestoryView onDestory onDetach

3.说说Fragment如何进行懒加载。

关键方法:setUserVisibleHint()是否对用户可见,onViewCreate:View是否创建完毕

4.ViewPager + Fragment结合使用会出现内存泄漏吗 & 如何解决?

ViewPager在使用FragmentPagerAdapter时候,当Fragment被销毁而List集合仍然持有Fragment的引用。1. List集合中保存Fragment的Class List<Class> ,通过反射Class的newInstance创建新的Fragment实例。List引用对象为强引用。

5.Fragment如何和Activity进行通信 & Fragment之间如何进行通信?

  • Fragment如何和Activity进行通信: setArgument(Bundle) 和 接口回调
  • Fragment之间如何进行通信:通过宿主Activity实现或者ViewModel+LiveData。

6.给我谈谈Fragment3种切换的方式以及区别 & 使用场景。

  • add() & remove():replace()实际上是调用 add() 和 remove() 方法remove 如果Fragment没有被加入回退栈中,Fragment实例会直接被销毁。add 方法向Activity添加Fragment实例
  • show() & hide():hide() 和 show() 不会重新创建Fragment,保留Fragment引用。
  • attach() & detach:调用detach是从ViewTree删除视图,Fragment的状态由FragmentManager保存,在使用attach方法会重新调用onCreateView重绘视图。使用此方法注意重复创建View造成的滑动卡顿问题,可通过view的parent的removeView删除与当前view的关联来解决。

remove 和 detach 区别在于:

remove:onPause->onStop->onDestroyView->Destory->onDetach

detach:onPause->onStop->onDestroyView

7.getFragmentManager,getSupportFragmentManager,getChildFragmentManager之间的区别?

getFragmentManager和getSupportFragmentManager主要区别在于V4包中默认兼容1.6以上的版本。

getChildFragmentManager属于Fragment中:

8.FragmentPagerAdapter和FragmentStatePagerAdapter区别?

区别在于onDestroyItem方法中。FragmentPagerAdapter会调用detach方法移除Fragment视图,但是List集合中仍然持有Fragment的引用。FragmentStatePagerAdapter调用remove方式销毁Fragment实例,在销毁Fragment之前会保存当前Fragment的操作状态saveInstance,再次创建时根据保存的操作状态创建新的Fragment。

9.Fragment如何实现类似Activity栈的压栈和出栈效果的?

FragmentManager实现压栈出栈效果。FragmentTransition记录每一次操作轨迹,通过是否调用addToBackStack设置标识位mAddToBackStack来判断是否要将此次操作加入返回栈。

addToBackStack相对操作。popBackStack

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×