关于Fragment跳转的那些事

        在初次接触安卓总是会迷惑于各种fragment和activity之间的跳转,以为Intent可以解决所有跳转问题。

        由于对于之前学习过的知识,我们对于fragment之间的跳转都是通过在fragment外部的一个activity的事件监听来控制fragment页面的切换。但是当我要在fragment里面添加监听事件跳转的时候,就遇到了问题,以为用Intent可以解决,结果会报错。后来了解到Inten是在在不同的 Activity 之间进行跳转或传递数据。而在同一个 Activity 中的不同 Fragment 之间的跳转或通信通常使用 FragmentManager 或其他方式来实现。

比如这一串代码就是我们常用的在acitivty里面用来切换fragment的代码(展示callFragment,隐藏另在两个Fragment)。

getSupportFragmentManager().beginTransaction().show(callFragment).hide(messageFragment).hide(dynamicsFragment).commit();

想到这个代码可以用来切换不同的fragment我就立即把他复制到我的fragment的监听事件中去,结果依旧是报错,只有在activity中getFragmentManager()才生效。

那我又在想,可不可以把这段代码封装成一个方法,让我在fragment里面去调用它呢?

 public void SwitchToContact(){
        getSupportFragmentManager().beginTransaction().show(callFragment).hide(messageFragment).hide(dynamicsFragment).commit();
       
    }

方法已经封装好。问题又出现了,如何在fragment里面去调用它呢?难道是重新new 一个Mainactivity的类型再去调用吗? 如果你这么做了,会出现一个这样的错误

 java.lang.IllegalStateException: FragmentManager has not been attached to a host.

这个错误通常出现在 Fragment 的生命周期方法之外调用 FragmentManager 的情况下,或者在 Fragment 还没有关联到 Activity 时就尝试使用 FragmentManager。在 Fragment 的生命周期方法之外使用 FragmentManager 可能会导致这个错误。

我们的思路应该获取当前 Fragment 所依附的 Activity 的实例,然后再调用这个方法。那么怎么获取呢?requireActivity()这个方法可以帮助到你,然后还要进行一个强制类型转换。所以最后在fragment里面的代码就应该是这样的。

 ((MainActivity)requireActivity()).SwitchToContact();

这样你就可以成功调用MainActivity里面的跳转方法了;

那么对于不同的Activity要跳转到具体的Fragment其实也就很容易实现了,你可以使用Intent跳转到当前管理那个Fragment的activity,并且使用intent传一个值过去。

 Intent intent = new Intent(HIstoryTestActivity.this,MainActivity.class);
                intent.putExtra("id",1);
               startActivity(intent);

然后在MainActivity去接收这个跳转带来的值,进行逻辑判断,判断正确则调用MainActivity的跳转fragment方法。 


        if(getIntent().getIntExtra("id",0)==1){
                siwtchToTestFragment();
        }

这样就可以完成跳转了。

以上是我的经验总结,如有错误,欢迎大家批评改正!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Android中,可以使用FragmentManager来管理Fragment跳转。具体步骤如下: 1. 获取FragmentManager对象: FragmentManager fragmentManager = getSupportFragmentManager(); 2. 开始Fragment务: FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 3. 创建要跳转Fragment对象: MyFragment myFragment = new MyFragment(); 4. 调用FragmentTransaction的replace方法,将当前Fragment替换为要跳转FragmentfragmentTransaction.replace(R.id.container, myFragment); 5. 调用FragmentTransaction的commit方法,提交务: fragmentTransaction.commit(); 其中,R.id.container是一个FrameLayout,用于显示Fragment的布局容器。 ### 回答2: 在Android中,使用Fragment的一个常见的需求是在一个Fragment中点击某个按钮或者view后跳转到另一个Fragment,也就是所谓的Fragment跳转Fragment。 在实现这个需求之前,需要先明确一些基本概念。在Android中,使用Fragment的最基本的方式是使用FragmentTransaction来进行添加、移除、替换、隐藏等操作。当一个新的Fragment需要被展示时,也就是所谓的Fragment跳转Fragment时,我们需要使用FragmentTransaction来进行以下步骤: 1. 创建要跳转Fragment实例。 2. 使用FragmentManager获取FragmentTransaction实例。 3. 调用FragmentTransaction的替换方法(replace)来将当前Fragment替换为要跳转Fragment。 4. 添加到回退栈(addToBackStack)中。 5. 调用FragmentTransaction的提交方法(commit)来提交这一操作。 示例代码如下: ``` FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container, new MyFragment()); transaction.addToBackStack(null); transaction.commit(); ``` 在这段代码中,我们使用了SupportFragmentManager来获取了一个FragmentTransaction对象,并将其替换为了新的Fragment,并将其添加到回退栈中。最后,调用了提交方法来提交这一操作。 需要注意的是,在跳转Fragment时,我们也可以传递一些数据给新的Fragment,例如某些参数、对象等。我们可以使用Bundle将这些数据打包传递给新的Fragment。在新的Fragment中,我们可以使用getArguments()方法获取这些数据。 总体来说,Fragment跳转FragmentAndroid中常见的一种场景,使用FragmentTransaction进行操作可以轻松地实现这一需求。在进行操作时,需要注意保存当前状态并添加到回退栈中,以便用户可以使用返回按钮返回上一个Fragment。 ### 回答3: Fragment 跳转 Fragment 是指在一个 Fragment 中通过代码的方式启动另一个 Fragment。在实际开发中,这种方式常常被用于实现页面之间的跳转或者数据的传递等操作。 在 Android 中,Fragment 跳转 Fragment 有多种方式,其中最常用的方式是使用 FragmentManager 开启一个新的 Fragment,具体流程如下: 1. 首先需要获取到 FragmentManager 对象,可以通过 getActivity().getSupportFragmentManager() 方法获取当前 Fragment 所在的 Activity 的 FragmentManager 对象。 2. 创建一个新的 Fragment 对象,这个对象可以在 FragmentManager 中进行管理,在后面我们会用到。 3. 随着 Fragment 的增多,一个问题也就显现出来,如何在父 Fragment 中实现多个 Fragment 之间的切换?这个时候可以选择使用 FragmentTransaction 对象,通过 add()、replace() 等方法实现对 Fragment 的增删操作。 代码实现如下: // 获取 FragmentManager 对象 FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); // 创建一个新的 Fragment 对象 SecondFragment fragment = new SecondFragment(); // 开启一个FragmentTransaction transaction = fragmentManager.beginTransaction(); // 通过 add()、replace() 等方法实现对 Fragment 的增删操作 transaction.replace(R.id.container, fragment); transaction.addToBackStack(null); // 提交务,启动 Fragment transaction.commit(); 在这段代码中,R.id.container 表示存放 Fragment 的容器,这个可以根据实际需要进行修改。 同时,我们还需要注意 addToBackStack() 方法的使用。这个方法可以将当前 Fragment 加入 BackStack 中,也就是将当前 Fragment 放入到一个栈中,方便用户在返回时直接返回到上一个 Fragment。需要注意的是,如果不使用 addToBackStack() 方法,则用户在返回时会直接退出当前 Activity。 总之,Fragment 跳转 Fragment 功能十分重要,能够帮助开发者实现程序中各种场景的操作。通过 Fragment 嵌套来实现页面嵌套,通过 Fragment 之间的跳转来实现页面之间的切换,是 Android 开发中不可或缺的一部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值