第一行代码:Android(2nd ed)(30):先从看得到的入手——探究活动 2.3.1

阅读数:61 2019 年 10 月 19 日 13:34

第一行代码:Android(2nd ed)(30):先从看得到的入手——探究活动 2.3.1

(使用 Intent 在活动之间穿梭:使用显式 Intent)

你应该已经对创建活动的流程比较熟悉了,那我们现在快速地在 ActivityTest 项目中再创建一个活动。

仍然还是右击 com.example.activitytest 包→New→Activity→Empty Activity,会弹出一个创建活动的对话框,我们这次将活动命名为 SecondActivity,并勾选 Generate Layout File,给布局文件起名为 second_layout,但不要勾选 Launcher Activity 选项,如图 2.14 所示。

第一行代码:Android(2nd ed)(30):先从看得到的入手——探究活动 2.3.1

图 2.14 创建 SecondActivity

点击 Finish 完成创建,Android Studio 会为我们自动生成 SecondActivity.java 和 second_layout.xml 这两个文件。不过自动生成的布局代码目前对你来说可能有些复杂,这里我们仍然还是使用最熟悉的 LinearLayout,编辑 second_layout.xml,将里面的代码替换成如下内容:

复制代码
<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/button_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 2"
/>
</LinearLayout>

我们还是定义了一个按钮,按钮上显示 Button 2。

然后 SecondActivity 中的代码已经自动生成了一部分,我们保持默认不变就好,如下所示:

复制代码
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
}
}

另外不要忘记,任何一个活动都是需要在 AndroidManifest.xml 中注册的,不过幸运的是,Android Studio 已经帮我们自动完成了,你可以打开 AndroidManifest.xml 瞧一瞧:

复制代码
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".FirstActivity"
android:label="This is FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity"></activity>
</application>

由于 SecondActivity 不是主活动,因此不需要配置<intent-filter>标签里的内容,注册活动的代码也简单了许多。现在第二个活动已经创建完成,剩下的问题就是如何去启动这第二个活动了,这里我们需要引入一个新的概念:Intent。

Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent 一般可被用于启动活动、启动服务以及发送广播等场景,由于服务、广播等概念你暂时还未涉及,那么本章我们的目光无疑就锁定在了启动活动上面。

Intent 大致可以分为两种:显式 Intent隐式 Intent,我们先来看一下显式 Intent 如何使用。

Intent 有多个构造函数的重载,其中一个是Intent(Context packageContext, Class<?> cls)。这个构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动,通过这个构造函数就可以构建出Intent的“意图”。然后我们应该怎么使用这个 Intent 呢?Activity 类中提供了一个startActivity()方法,这个方法是专门用于启动活动的,它接收一个Intent参数,这里我们将构建好的 Intent 传入startActivity()方法就可以启动目标活动了。

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

复制代码
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});

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

重新运行程序,在 FirstActivity 的界面点击一下按钮,结果如图 2.15 所示。

第一行代码:Android(2nd ed)(30):先从看得到的入手——探究活动 2.3.1

图 2.15 SecondActivity 界面

可以看到,我们已经成功启动 SecondActivity 这个活动了。如果你想要回到上一个活动怎么办呢?很简单,按下 Back 键就可以销毁当前活动,从而回到上一个活动了。

使用这种方式来启动活动,Intent 的“意图”非常明显,因此我们称之为显式 Intent

评论

发布