Activity和Fragment之间的五种跳转方式

**ps:** 参考的链接:https://www.jianshu.com/p/ab1cb7ddf91f

一、简介

经过上一次的安卓作业后,自己被自己创建的Activity和Fragment的各种跳转,搞得可谓是晕头转向的,虽然总的跳转也不多,但是经常跳来跳去的,就有点不知所措了,所以就想写一篇文章来介绍一下有关Activity和Fragment之间的五种跳转方式:

  1. 从一个Activity跳转到另一个Activity
  2. 从同一个Activiy的一个Fragment跳转到另外一个Fragment

  3. 从一个Activity的Fragment跳转到另外一个Activity

  4. 从一个Activity跳转到另外一个Activity的Fragment上
  5. 从一个Activity的Fragment跳转到另外一个Activity的Fragment上

二、准备工作(两个Activity和三个Fragment)

**ps:**  准备工作将以自己本次作业作为案例

1、布局

在MainActivity的布局文件中写一个子布局

 android:id="@+id/layout"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

2、创建两个java类文件继承v4包的Fragment,并重写onCreateView方法引用对应的Fragment布局文件(这里以其中一个为例)

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if(contentView == null) {  
    contentView = inflater.inflate(R.layout.my_fragment, container, false);   
    Button myButton = (Button) contentView.findViewById(R.id.my_button);        
    Button myReturn = (Button) contentView.findViewById(R.id.my_return);     
    Button myOther = (Button) contentView.findViewById(R.id.my_other);    
    myButton.setOnClickListener(this);  
    myReturn.setOnClickListener(this);     
    myOther.setOnClickListener(this); 
 }  
    return contentView;
}

3、在MainActivity中先添加进一个Fragment进行最开始的展示(压栈式添加)

getSupportFragmentManager()

getSupportFragmentManager().beginTransaction()
         .add(R.id.constraintLayout,gameFragment)
         .commit();
getSupportFragmentManager().beginTransaction()
         .add(R.id.constraintLayout,quziFragment)
         .commit();
getSupportFragmentManager().beginTransaction()
         .add(R.id.constraintLayout,myFragment)
         .commit();

4、在Fragment类中对几个按钮进行点击监听,在点击方法中对几个跳转进行操作

game.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getSupportFragmentManager().beginTransaction()
                        .show(Fragment1).hide(Fragment2).hide(Fragment3)
                        .commit();
            }
        });
quzi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getSupportFragmentManager().beginTransaction()
                        .show(Fragment2).hide(Fragment1).hide(Fragment3)
                        .commit();
            }
        });
my.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getSupportFragmentManager().beginTransaction()
                        .show(Fragment3).hide(Fragment1).hide(Fragment2)
                        .commit();
            }
        });

三、相关跳转操作

说明:

蓝颜色:所有Activity,Fragment或者按键的名称用该颜色表示

紫颜色:方法名(方法在上一个跳转说明中提到了就不再赘叙)用该颜色标识

1、从一个Activity跳转到另一个Activity

这个操作是最简单实现的,故不在此多做赘叙,详情请看以下代码:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MAinActivity.this, OtherActivity.class);
                //定义Intent,表示从MAinActivity跳转至OtherActivity去
                startActivity(intent);
            }
        });

说明:

button:是一个点击事件发生的按钮,用它代替所有的可点击的布局

MainActivity:当前所在Activity的名称

OtherActivity:要跳转的Activity的名称

Intent:Android中用于在不同组件之间传递信息的对象。它可以用来启动Activity、Service,或者发送广播等。

startActivity(intent):告诉系统你想要执行这个Intent所描述的操作。

2、从同一个Activiy的一个Fragment跳转到另外一个Fragment

由于此操作是在同一个Activity中实现的,故相对而言也比较简单,详情请看以下代码:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              getSupportFragmentManager().beginTransaction()
               .show(OtherFragment).hide(NowFragment) //展示OtherFragment,隐藏NowFragment
               .commit();
            }
        });

说明:

button:是一个点击事件发生的按钮,用它代替所有的可点击的布局

OtherFragment:要跳转的Fragment的名称

NowFragment:当前Activity所在的Fragment的名称

.show():你所想要展示的Fragment布局

.hide():你不想展示的(即你想隐藏的)的Fragment布局

getSupportFragmentManager():这是一个从FragmentActivity(或其子类,如AppCompatActivity)中调用的方法。它返回一个FragmentManager的实例,这个实例用于处理与Fragment相关的操作,如添加、移除、替换等。
beginTransaction():这是一个从FragmentManager中调用的方法。它返回一个FragmentTransaction对象,该对象允许你进行一系列的Fragment操作(如添加、移除、替换等),并最后通过commit()方法将这些操作应用到Activity上。

commit():执行之前通过FragmentTransaction对象添加、移除、替换或执行的其他Fragment操作。

3、从一个Activity的Fragment跳转到另外一个Activity

此跳转与Activity之间的跳转如出一辙,只是引用上下文的时候,写成getActivity()即可!

例如从当前Fragment跳转到OtherActivity中去:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), OtherActivity.class);
                //定义Intent,表示当前Fragment跳转至OtherActivity去
                startActivity(intent);
            }
        });

说明:

button:是一个点击事件发生的按钮,用它代替所有的可点击的布局

getActivity() :该方法用于从Fragment中获取与其关联的Activity的一个方法。它返回一个Activity对象,这个对象代表了与Fragment关联的Activity。

4、从一个Activity跳转到另外一个Activity的Fragment上

例如OtherActivity现在展示的是NowFragment,我们要从MAinActivity跳转到OtherActivity的OtherFragment上去:
首先,我们在MAinActivity中的跳转事件中给MainActivity传递一个名为id的参数:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              Intent intent = new Intent(MAinActivity.this,OtherActivity.class);
                intent.putExtra("id",0);
                startActivity(intent);
            }
        });

然后,我们在OtherActivity里接收id值,对值进行判断,如果正确进行跳转操作:

int id = getIntent().getIntExtra("id",0);//用来获取MAinActivity传来的id值
if(id==1){
            getSupportFragmentManager()
               .beginTransaction()
               .show(OtherFragment).hide(NowFragment) //展示OtherFragment,隐藏NowFragment
               .addToBackStack(null)
               .commit();
        }

说明:

button:是一个点击事件发生的按钮,用它代替所有的可点击的布局

MAinActivity:当前Activity的名称

OtherActivity:要跳转的Activity的名称

OtherFrament:要跳转到OtherActivity的Fragment的名称

NowFragment:OtherFragment所展示的Fragment的名称

putExtra:这是 Intent 类的一个方法,用于向 Intent 中添加额外的数据。这个数据可以是各种类型,如基本数据类型(int, float, boolean等)、字符串(String)、可序列化的对象(Serializable)等。
"id":这是数据的键(key),用于在接收端检索这个数据。它是一个字符串,通常用于描述数据的类型或用途。
1:这是与 "id" 键关联的值(value)。

getIntExtra:这是 Intent 类的一个方法,用于获取 Intent 中添加的额外数据。

addToBackStack(String name):这是 FragmentTransaction 的一个方法,用于将当前的事务添加到后退栈中。当用户按下返回键时,系统会从后退栈中弹出并恢复上一个Fragment的状态。
null:在这个方法的参数中,你可以传递一个字符串作为此事务的名称。但是,在很多情况下,特别是当你只关心基本的后退栈功能时,你可以传递 null。传递 null 意味着这个事务没有特定的名称,但它仍然会被添加到后退栈中。

5、从一个Activity的Fragment跳转到另外一个Activity的Fragment上

这种跳转与第四种跳转基本相似,只需将

Intent intent = new Intent(MAinActivity.this,OtherActivity.class)

更改成:

Intent intent = new Intent(getActivity(),OtherActivity.class)

细看便是将 MAinActivity.this 改成了 getActivity() ,其他不用变,详情请见第四种方法。

四、总结

自己本次安卓作业中用到的几种跳转就是以上这五种类型了,对于像我这种初学者一口气学这五中跳转难免会被搞的晕头转向,但是一旦自己多写几个案例,多用几次就会发现其实也不难。

**ps:**这是本人第一次写博客,由于以前都没有经验,故参考了开头注解的那个链接作者的文章,也是根据自己学的课程来写了更适合初学者来学习的跳转文章,如果有写的不好的地方还望各位多多指教。

  • 32
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ActivityFragmentAndroid中常用的两种组件,它们可以相互跳转和嵌套,实现应用的各种功能。常用的跳转方式有Intent、FragmentTransaction和Navigation,在使用时需要根据需求选择最合适的方式,同时需要注意生命周期的管理,避免出现意外的错误。 ### 回答2: ActivityFragment是常用的Android组件,它们的跳转Android应用程序开发中必不可少的内容。在Android中,通过ActivityFragment间的跳转,可以实现不同页面之间的交互和数据传输,实现更丰富的应用功能和用户体验。 首先,ActivityFragment间的跳转需要先向Android系统注册对应的ActivityFragment,为它们分配唯一的标识符,才能被系统正确识别。ActivityFragment跳转实现方式也有所不同。 在Activity间的跳转中,应用程序需要调用startActivity()方法来启动目标Activity。例如,可以在当前Activity中创建一个Intent对象来指向目标Activity,并调用startActivity()方法来启动它。如下: Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); 在这个例子中,MainActivity是当前Activity的上下文环境,SecondActivity是目标Activity。通过调用startActivity()方法,Android系统会根据Intent对象中的信息将目标Activity启动起来,并切换至目标Activity的界面。 在Fragment间的跳转中,应用程序可以通过FragmentManager对象生成一个FragmentTransaction,然后调用add()或replace()方法来添加或替换指定的Fragment。例如: FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.container, new MyFragment()); transaction.addToBackStack(null); transaction.commit(); 在这个例子中,使用getSupportFragmentManager()获取FragmentManager对象,然后创建一个FragmentTransaction对象来代表一个操作序列。通过replace()方法将指定的Fragment替换当前Fragment,然后使用addToBackStack()方法将当前Fragment添加到回退栈中,最后调用commit()方法来提交操作。 总的来说,ActivityFragment跳转Android开发中重要的组件之一,通过合理的跳转方式可以实现不同页面之间的交互和数据传输,为用户提供更加便捷和丰富的应用体验。在实际开发中,建议灵活运用ActivityFragment跳转,根据应用需求合理设计跳转流程,提高应用程序的效率和稳定性。 ### 回答3: 在 Android 应用开发过程中,ActivityFragment 是实现应用页面的两个主要组件。在应用的不同页面之间进行跳转操作时,我们需要掌握如何使用 Intent 和 FragmentTransaction 类来完成相关操作。 Activity跳转:我们可以使用 Intent 类来实现 Activity 之间跳转。首先,我们需要创建一个 Intent 对象,并通过 setClass() 或 setClassName() 方法指定要跳转到的目标 Activity。接着,我们可以通过 startActivity() 方法来启动 Intent,完成 Activity 跳转。 下面是一段示例代码: ``` Intent intent = new Intent(this, TargetActivity.class); startActivity(intent); ``` 其中,this 表示当前 Activity,TargetActivity 是我们要跳转的目标 Activity。在 startActivity() 方法执行后,Android 系统会按照指定的类名加载目标 Activity,并启动该页面。 Fragment跳转:在使用 Fragment 时,我们可以通过 FragmentTransaction 类来完成对 Fragment 的添加、替换、删除等操作。同样,我们可以通过该类的 replace() 方法来实现 Fragment 之间跳转。 下面是一段示例代码: ``` FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.container, new TargetFragment()); transaction.commit(); ``` 其中,getSupportFragmentManager() 方法用于获取 Fragment 管理器,R.id.container 是一个 FrameLayout 控件的 ID,代表要将 Fragment 添加到该控件中,TargetFragment 是我们要跳转的目标 Fragment。在 replace() 方法执行后,会将当前页面的 Fragment 替换为目标 Fragment,完成 Fragment 跳转。 需要注意的是,在进行 Fragment 替换时,我们需要使用 addToBackStack() 方法将当前 Fragment 加入回退栈中,以便用户在返回上一级页面时能够正确地返回到上一个 Fragment。 总体来说,ActivityFragment跳转Android 应用开发中非常常用的功能。我们只需要掌握 Intent、FragmentTransaction 等类的基本用法,就可以实现页面之间的无缝切换和流畅的用户体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值