在应用程序中,几乎每个Activity都不是独立存在的,因为单独的一个Activity往往是不能实现程序所有功能。举个例子,我们日常使用的微信,启动后首先显示的是登录界面,登录成功后进入到会话列表页面,点击会话后会再跳转到聊天页面,这就是页面之间的跳转,也可称为Activity间的跳转。

Activity间的跳转方式

显式跳转:明确指定需要跳转到的目标Activity

隐式跳转:不明确指定某个Activity,根据条件找到目标Activity

无论是显式跳转、隐式跳转都可以通过Intent来实现,下面通过一个小实例来演示Activity之间的跳转

如何实现Activity间的跳转 ?

Intent

Intent中文意思为意图、意向,在Android中,Intent为一个消息传递对象,可用于Android组件之间传递请求操作,如:启动服务启动Activity、传递数据、发送广播等。通过在Intent对象中封装不同类型的信息传递相应的请求操作。Intent封装传递类型主要有:

  1. 动作(Action)
  2. 组件名称(ComponentName)
  3. 种类(Category)
  4. 数据(Data)
  5. 附件信息(Extra)
  6. 标志(Flag)

下面我们使用Intent分别实现显式跳转和隐式跳转:

实例需求

点击按钮,从FirstActivity跳转到SecondActivity

需求分析

创建一个项目,新建两个Activity分别为:FirstActivity、SecondActivity,FirstActivity的布局中添加一个Button控件,在该控件的监听事件中编写跳转到SecondActivity的逻辑代码,布局布局代码就不提供了,都是最基础的布局创建,控件添加。

显示跳转实现 

实例代码

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        Button mBtn = findViewById(R.id.btn);
        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });
    }
}

代码解析

在FirstActivity的Java代码中声明中找到用于触发跳转的Button控件,再通过.setOnClickListener( )方法中通过匿名内部类的方式设置该Button的监听事件,在监听事件中,创建了一个Intent实例对象,Intent的构造函数中传入了两个参数:

  • 第一个参数:发送跳转请求的Activity.this(这里我们是从FirstActivity进行跳转,所以是FirstActivity.this)
  • 第二个参数:目标Activity.class(跳转的目标Activity为SecondActivity,故此处为SecondActivity.class)
  • startActivity:该方法用于Activity间的跳转,把封装着跳转信息的intent作为参数传入即可

实例演示

android intent跳转 后 finish intent跳转activity_显式

隐式跳转实现 

隐式跳转并不会再Intent中明确的指定目标Activity,而是需要在AndroidManifest文件中给目标Activity添加以下代码:

<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="IntentTest.action"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
  •  <intent-filter>:意图过滤器,隐式跳转就是通过匹配意图过滤器中的内容来确定目标Activity
  • <action>:表示动作,其值可以设置为一段自定义的字符串,也可使用系统提供的action,可添加多个Action,但是只要匹配其中一个Action即可。
  • <category>:表示种类,跟action一样,也是过滤器中的一种匹配类型,也可自定义或者使用系统提供的category,可以有多个category,且必须添加<category android:name="android.intent.category.DEFAULT"/>这个过滤条件

给目标Activity添加好过滤器后,回到FirstActivity中修改代码:

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        Button mBtn = findViewById(R.id.btn);
        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setAction("IntentTest.ACTION");
                intent.addCategory("android.intent.category.DEFAULT");
                startActivity(intent);
            }
        });
    }
}

在FirstActivity中的Button点击事件中,创建了一个Intent实例对象,注意,这次我们并没有明确指定跳转到的Activity,而是通过两个方法,将目标Activity的过滤器中设置的过滤条件传入到了Intent实例中,再由Intent进行匹配、找到符合条件的Activity进行跳转:

  • .setAction:给Intent对象传入action
  • .addCategory:给Intent添加category
  • startActivity:传入Intent进行跳转

实例演示

android intent跳转 后 finish intent跳转activity_显式_02

 

ok,以上就是如何通过Intent实现Activity间的跳转,上面分别通过显式和隐式两种方式实现。

总结:

显式跳转即在Intent中显式的声明需要跳转到的目标Activity

隐式跳转是给目标Activity添加意图过滤器,再给Intent中设置相应意图属性,对目标Activity进行匹配,再跳转。