fragmentManager Androird对Fragemt的管理

来源:互联网 发布:centos 7 服务器配置 编辑:程序博客网 时间:2024/04/29 05:19

fragmentManager Androird对Fragemt的管理

4/23/2016 2:35:13 PM

这是本人自入行以来的第一篇技术博客,若有不当之处还烦请各位看官积极指出我会加以订正

Android的fragment在APP中的流行程度我就不加以去深讲了,我们直接来讲技术吧!

各位看官热腾腾的代码来了,下面我们就来细细品解这段代码吧!

    private void switchToFragment(String tag) {        Fragment to=getFragmentManager().findFragmentByTag(tag);        ShouYeFragment shouyefragment = (ShouYeFragment) getFragmentManager().findFragmentByTag(ShouYeFragment.TAG);        FragmentTransaction transation = getFragmentManager().beginTransaction();        if (ShouYeFragment.TAG.equals(tag)){            if (null==to||!to.isAdded()){                to=ShouYeFragment.newInstance();                transation.add(R.id.ls_fragment_layout,to,ShouYeFragment.TAG);            }else{                transation.show(to);            }            transation.commit();            transation.show(to);        }    }
1.我们看到想要对Fragment进行管理首先我们利用getFragmentMessage()的Tag标记获得一个被传进来的fragmeTag也就是我们这里的 tag
 Fragment to=getFragmentManager().findFragmentByTag(tag);
有的小伙伴该迷惑了,这个tag是个什么玩意啊,我应该怎么去获得他呢?其实我想说我也不知道!可是宝宝不想挨打。。那就让我们把它的面纱慢慢揭露吧!其实啊,他就是一个静态常量,在我们没声明一个fragment的时候我们加入这样的一行代码即可,我们就以我们可以看到的ShouYeFragment为例:
public static final String TAG = ShouYeFragment.class.getCanonicalName();

是不是感觉很 so easy啊
因为他是一个公共的静态常量,不需要通过声明ShouYeFragment的实例来引用,所对于你来说就自由了!

直接拿到这个TAG将其传入我们的方法中

 switchToFragment(ShouYeFragment.TAG);

那咱们就接着往下走吧

ShouYeFragment shouyefragment = (ShouYeFragment) getFragmentManager().findFragmentByTag(ShouYeFragment.TAG);

是不是有点蒙圈了!为什么上一句我们没有强制类型转换呢,原因很简单看首头的类型啊!前一句我们使用的Fragment来接收而这一句我们是使用ShouYeFragment来接收的,这里要说明一下

其实这里是你所有的附属于在同一Activity的之上的Fragment的一个实例声明,如果你有其他的fragment也是通过只一个Activity进行展示的那么需要在这里统一声明出来

有的小伙伴迷惑了,什么叫“附属同一个Activity存在呢”,其实Google官方之所会提出Fragment这一概念,是因为我们的Activity它太重了而fragment是属于轻量级的展示页面,同一个Activity可以同时存在多个Fragment的,好了以我现在的实力也就只能介绍到这了,至于对与不对呢 那就要“仁者见仁,智者见智咯”,咱们接着说:

其实对Fragment的管理我们简单的也可以理解成是对Fragment的事务的管理,看到这里你是不是想起了我们Android的sqlite数据库的beginTransaction(事务)呢,没错!我们的FragmentManager beginTransaction同样具备这样的能力,它可以对Fragment进行添加、删除、替换以及执行其它动作的能力。

 FragmentTransaction transation = getFragmentManager().beginTransaction();

前期的准备工作我们做完了,那么接下来就是我们的业务处理部分了

if (ShouYeFragment.TAG.equals(tag)){            if (null==to||!to.isAdded()){                to=ShouYeFragment.newInstance();                transation.add(R.id.ls_fragment_layout,to,ShouYeFragment.TAG);            }else{                transation.show(to);            }            transation.commit();            transation.show(to);        }    }

我们在这里拿到我们传进来的tag为他做判断,看他是否与当前的我们所展示的fragment,如果是那我们就直接可以显示了,若不是呢? 那我就要对该fragment进行添加了,这里注意一下你添加上之后一定记得将事务提交欧,要不然当前的fragment是不会添加到事务中去的!

这是我入行以来的第一篇博客,希望给为多多谅解啊,若要不当的地方希望多多提及,我们共同进步吧~~~

1 0