Android Fragment使用最全解析

作者: iyifei | 来源:发表于2016-08-23 14:01 被阅读446次

    产生及介绍

    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使用最全解析

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