Android面试细节之 Fragment(碎片)

作者: 清枫_小天 | 来源:发表于2016-07-08 11:12 被阅读700次

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

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

    碎片的使用方式

    碎片的简单用法
    • 新建一个Class文件继承自Fragment重写onCreateView()方法加载布局。
    • 在activity_main.xml文件中使用<fragment>标签在布局中添加碎片。
    • 这里需要通过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(碎片)

        本文链接:https://www.haomeiwen.com/subject/oltrjttx.html