Android Fragment使用最全解析

产生及介绍

Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。

使用大全

客官,代码来!

   /**
     * 往Activity中添加一个Fragment
     * 通过 getSupportFragmentManager().popBackStack(); 出栈
     * @param containerViewId
     * @param fragment
     * author: yifei
     */
    public void addFragment(int containerViewId, Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(containerViewId, fragment).commit();
    }

    /**
     * 从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁。如果添加到回退栈,则这个Fragment的实例不会销毁,但是它的布局视图会被销毁
     * @param fragment
     * author: yifei
     **/
    public void removeFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.remove(fragment).commit();
    }

    /**
     * 使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
     * @param containerViewId
     * @param fragment
     * author: yifei
     **/
    public void replaceFragment(int containerViewId, Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(containerViewId, fragment).commit();
    }

    /**
     * 隐藏当前的Fragment,仅仅是设为不可见,实例并不会销毁,Fragment的布局视图也不会销毁
     * @param fragment
     * author: yifei
     **/
    public void hideFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.hide(fragment).commit();
    }

    /**
     * 显示之前隐藏的Fragment
     * @param fragment
     * author: yifei
     **/
    public void showFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.show(fragment).commit();
    }
    
    /**
     * 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护
     * @param fragment
     * author: yifei
     **/
    public void detachFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.detach(fragment).commit();
    }

    /**
     * 重建view视图,附加到UI上并显示
     * @param fragment
     * author: yifei
     **/
    public void attachFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.attach(fragment).commit();
    }

    /**
     * 将一个fragment替换为另一个,并在后台堆栈中保留之前的状态, 通过 getSupportFragmentManager().popBackStack(); 出栈
     *
     * 解析:当通过函数transaction.addToBackStack(null)将这个事务添加到回退栈,则会记录这个事务的状态变化过程,如从FragmentA —>FragmentB,
     * 当用户点击手机回退键时,因为transaction的状态变化过程被保存,则可以将事务的状态变化过程还原,即将FragmentB —> FragmentA.
     * 当Activity的回退栈中没有事务时,在按返回键则会退出Activity
     *
     * @param containerViewId
     * @param fragment
     * author: yifei
     */
    public void addToBackStackFragment(int containerViewId, Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(containerViewId, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }

你可能感兴趣的:(Android Fragment使用最全解析)