首页 > 代码库 > Android第一行学习代码笔记四---使用Intent在活动之间穿梭

Android第一行学习代码笔记四---使用Intent在活动之间穿梭

一:使用显示Intent

右键com.example.firstactivity包->New->Activity->Empty Activity,活动名称为secondActivity,并勾选Generate Layout File,给布局文件起名为secondlayout,但并不勾选Launcher Activity选项,点击Finish,打开secondlayout.xml,将里面的代码替换成如下内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/Button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2"/>
</LinearLayout>

还是定义了一个按钮,按钮上显示Button2,然后secondActivity中的代码已经自动生成了一部分,默认保持不变,另外任何一个活动都需要在AndroidManifest.xml中注册,系统已经帮我们注册了,由于secondActivity不是主活动,因此不需要配置<intent-filter>标签里的内容,现在第二个活动已经创建完成,剩下的就是如何去启动第二个活动了---Intent

Intent:是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。

Intent有多个构造函数的重载:

Intent(Content packageContent,Class<?>cls),第一个是要求提供一个启动活动的上下文,第二个参数Class是指定要启动的目标活动,通过这个构造函数就可以构建出Intent的“意图”。Activity类中提供了一个startActivity()方法,这个是专门用于启动活动的,它接收一个Intent参数,这里我们将构建好的Intent传入startActivity()方法就可以启动目标活动了。

修改firstActivity中按钮的点击事件:

 button.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
           Intent intent=new Intent(firstActivity.this,secondActivity.class);
           startActivity(intent);
      }
 });

首先构建了一个Intent,传入firstActivity.this作为上下文,传入SecondActivity.class作为活动目标,“意图”很明显了,即在firstActivity这个活动的基础上打开secondActivity活动,然后通过startActivity()方法执行这个Intent。

技术分享

可以看到我们已经成功启动secondActivity这个活动了,使用这中方法来启动活动,Intent“意图很明显,因此成为显示Intent”。

二:隐式Intent:

它并不明确指出我们想要启动哪一个活动,而是指定一系列更为抽象的action和category等信息,交由系统去分析这个Intent,并帮我们找出合适的活动去启动。合适的活动就是可以响应这个隐式Intent的活动,通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category,打开AndroidMainfest.xml,添加如下代码:

  <activity android:name=".secondActivity">
            <intent-filter>
                <action android:name="com.example.firstactivity.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

在<action>标签中我们指明了当前活动可以响应com.example.firstactivity.ACTION_START这个action,而<category>标签包含了一些附加信息,更精确的指明了当前活动能够响应的Intent还可能带有的category,只有和标签中内容同时匹配的Intent指定的action和category时,这个活动才能响应Intent。

修改firstActivity中按钮的点击事件,代码如下:

 button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent intent=new Intent("com.example.firstactivity.ACTION_START");
                startActivity(intent);
            }
        });

我们使用了Intent的另一个构造函数,直接将action字符串传了进去,表明我们想启动能够响应com.example.firstactivity.ACTION_START这个action的活动至于category,因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity的时候自动将category加到Intent,重新运行程序和显示Intent效果相同。说明我们在<activity>标签配置的action和category生效了。

每个Intent只能指定一个action,但却能指定多个category,目前我们的category只有一个默认的category,现在增加一个自定义的,可以使用Intent的addCategory()方法添加。因为要<action>和<category>同时匹配上才能响应,所以要在AndroidManifest.xml中声明。

<activity android:name=".secondActivity">
            <intent-filter>
                <action android:name="com.example.firstactivity.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.example.firstactivity.MY_CATEGORY"/>
            </intent-filter>
        </activity>

  

Android第一行学习代码笔记四---使用Intent在活动之间穿梭