fragmentManager Androird对Fragemt的管理


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是不会添加到事务中去的!

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Fragment 中可以通过 getActivity().getSupportFragmentManager() 方法获取 Activity 中的 FragmentManager。获取到 FragmentManager 后,就可以使用其提供的方法来管理其他 Fragment 实例。 例如,可以通过 FragmentManager 的beginTransaction()方法启动一个 Fragment 事务,在事务中可以添加、删除或者替换 Fragment。示例代码如下: ``` //获取 Activity 中的 FragmentManager FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); //启动一个 Fragment 事务 FragmentTransaction transaction = fragmentManager.beginTransaction(); //添加一个 Fragment MyFragment fragment = new MyFragment(); transaction.add(R.id.container, fragment); //提交事务 transaction.commit(); ``` 在上面的示例代码中,我们获取了 Activity 中的 FragmentManager,并启动了一个 Fragment 事务。然后通过 add() 方法向容器中添加了一个新的 Fragment 实例。最后调用 commit() 方法提交事务即可完成 Fragment 的管理。 除了添加 Fragment,也可以使用 remove() 方法来删除 Fragment,使用 replace() 方法来替换 Fragment 等等。不同的操作需要使用不同的方法来实现,具体可以参考 FragmentManager 的相关文档。 ### 回答2: 在 Fragment 中通过 getActivity().getFragmentManager() 方法来获取 Activity 中的 FragmentManager 实例。通过这个 FragmentManager 实例,我们可以对其他 Fragment 进行管理。 要管理其他 Fragment 实例,我们可以使用 FragmentTransaction 类来进行操作。通过 FragmentTransaction 类的实例,我们可以进行一系列的操作,包括添加、替换、移除和隐藏等。 要添加一个 Fragment 实例,我们可以使用 FragmentTransaction 的 add() 方法,并指定容器的 ID 和要添加的 Fragment 实例。例如: FragmentTransaction transaction = getActivity().getFragmentManager().beginTransaction(); MyFragment fragment = new MyFragment(); transaction.add(R.id.container, fragment); transaction.commit(); 要替换一个 Fragment 实例,我们可以使用 FragmentTransaction 的 replace() 方法,并指定容器的 ID 和要替换的 Fragment 实例。例如: FragmentTransaction transaction = getActivity().getFragmentManager().beginTransaction(); MyFragment fragment = new MyFragment(); transaction.replace(R.id.container, fragment); transaction.commit(); 要移除一个 Fragment 实例,我们可以使用 FragmentTransaction 的 remove() 方法,并指定要移除的 Fragment 实例。例如: Fragment fragment = getActivity().getFragmentManager().findFragmentById(R.id.container); if (fragment != null) { FragmentTransaction transaction = getActivity().getFragmentManager().beginTransaction(); transaction.remove(fragment); transaction.commit(); } 要隐藏一个 Fragment 实例,我们可以使用 FragmentTransaction 的 hide() 方法,并指定要隐藏的 Fragment 实例。例如: Fragment fragment = getActivity().getFragmentManager().findFragmentById(R.id.container); if (fragment != null) { FragmentTransaction transaction = getActivity().getFragmentManager().beginTransaction(); transaction.hide(fragment); transaction.commit(); } 以上就是在 Fragment 中获取 Activity 的 FragmentManager管理其他 Fragment 实例的方法。 ### 回答3: 在 Fragment 中获取 Activity 中的 FragmentManager 可以通过调用 getActivity() 方法来实现,然后使用 getSupportFragmentManager() 方法来获取 FragmentManager 的实例。具体代码如下: FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 获取到 FragmentManager 后,可以通过调用一系列的方法来管理其他 Fragment 实例,例如添加 Fragment、替换 Fragment、移除 Fragment 等。下面是几个常用的方法: 1. 添加 Fragment:可以使用 fragmentManager 的 beginTransaction() 方法开启一个事务,然后通过 add() 方法将要添加的 Fragment 添加到容器中,最后调用 commit() 方法提交事务。示例代码如下: MyFragment myFragment = new MyFragment(); fragmentManager.beginTransaction().add(R.id.container, myFragment).commit(); 2. 替换 Fragment:可以使用 replace() 方法将容器中的 Fragment 替换为新的 Fragment。示例代码如下: MyFragment myFragment = new MyFragment(); fragmentManager.beginTransaction().replace(R.id.container, myFragment).commit(); 3. 移除 Fragment:可以使用 remove() 方法将指定的 Fragment 从容器中移除。示例代码如下: MyFragment myFragment = (MyFragment) fragmentManager.findFragmentById(R.id.fragment); fragmentManager.beginTransaction().remove(myFragment).commit(); 以上是在 Fragment 中获取 Activity 中的 FragmentManager管理其他 Fragment 实例的基本方法,可以根据具体需求进行调用和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值