Android面试细节之 Fragment(碎片)

我们可以将Fragment理解成一个迷你型的活动,因为它和活动太像了,同样都能包含布局,同样有自己的生命周期。
我们用时有两个不同包下的Fragment供选择

  1. android.app.Fragment。我们的程序是面向Android4.0以上的。(建议使用
  2. 另一个包下的Fragment主要是用于兼容低版本的Android系统。

碎片的使用方式

碎片的简单用法
  • 新建一个Class文件继承自Fragment重写onCreateView()方法加载布局。
  • 在activity_main.xml文件中使用标签在布局中添加碎片。
  • 这里需要通过android:name属性来显示指明要添加的碎片类名,注意一定要将类的包名也加上
动态添加碎片

主要有以下五个步骤:

  • 创建待添加碎片实例

  • 获取到FragmentManager,在活动中可以直接调用getFragmentManager()方法得到

  • 开启一个事务,通过调用beginTransaction()方法开启

  • 向容器内加入碎片,一般使用replace()方法实现,需要传入容器的ID和待添加的碎片实例

  • 提交事物,调用commit()方法来完成

      AnotherFragment fragment=new AnotherFragment()  
      FragmentManager manager=getFragmentManager();
      FragmentTransaction tran=manager.beginTransction();
      tran.replace(R.id.right_place,fragment); 
      tran.commit()  
    
在碎片中模拟返回栈

只需要调用tran.addToBackstack(null);参数一般传入null即可。
当我们重新运行程序时,当将另一个fragment添加进来,点击Back,程序不会退出而是回到了一开始的界面,再次按下back程序才会退出。

碎片和活动之间进行通信
  • 活动中调用碎片的方法
    RightFragment rightFragment=(RightFragment)getFragmentManager().findFragmentById(R.id.fragment);
  • 碎片中调用活动的方法
    Mainactivity activity=(MainActivity)getActivity();
    掌握了这两个通信方式,我们就可以实现碎片于碎片之间通信。首先在一个碎片中可以得到一个与它相关联的活动,然后通过这个活动去获取另一个碎片实例。

碎片的生命周期

活动中的有的回掉方法碎片中几乎都有,碎片还提供了一些附加方法

  • onAttach() 当碎片和活动建立关联的时候调用
  • onCreateView()为碎片创建视图(加载布局)时调用
  • onActivityCreated()确保与碎片相关联的活动一定已经创建完毕的时候调用
  • onDestroyView()当与碎片关联的视图被移除的时候调用
  • onDetach()当碎片和活动解除关联的时候调用

第一次被加载到屏幕上时依次执行
onAttach() -- onCreate()--- onCreateView()--onActivityCreated()--onStart()--onResume().

当我们点击了替换按钮之后
onPause()--onStop()---onDestoryView() (如果替换的时候没有调用addToBackStack()方法,此时onDestory()--onDetach()方法也会得到执行)

当点击Back重新回到这个Frament界面
onActivityCreated()--onStart()--onResume() (onCreate()和OnCreateView()并没有执行,所以我们使用的addToBackStacck()方法使得Fragment和它的视图并没有销毁)

再按下back退出程序
onPause()--onStop()---onDestoryView()--onDestory()--onDetach()

Fragment进阶正确使用姿势

你可能感兴趣的:(Android面试细节之 Fragment(碎片))