在前面的学习中,我们已经创建好了一个拥有一个文本域和一个按钮的Activity。今天的学习任务就是在MyActivity中加入一些代码,当用户点击按钮的时候跳转到另外一个Activity页面。

按钮的响应事件

要实现上面的功能,我们首先需要做的就是学习怎么去响应按钮的点击事件。

第一步:打开我们的activity_my.xml,然后给Button加入android:onClick属性,顾名思义,“onClick”的含义就是“当点击时”,这个属性对应的属性值就是一个在对应的Activity页面代码中的一个方法名称,当用户点击按钮的时候,Android系统会帮我们执行这个方法。

<Button
        android:id="@+id/btn_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btn_send"
        android:onClick="sendMessage"/>

第二步:在MyActivity.java文件中添加sendMessage()方法,当按钮被点击时,弹出一个Toast提示。

/**
     * 点击"发送"按钮的回调方法
     * 注意:这个方法必须是
     *          public修饰
     *          返回值必须是void
     *          参数必须是View
     * @param view 触发回调方法的View
     */
    public void sendMessage(View view){
        Toast.makeText(this,getString(R.string.txt_click_send_btn),Toast.LENGTH_SHORT).show();
    }

注意方法注释部分的说明。这里我们用到了字符串资源txt_click_send_btn,它定义在res/value/strings.xml中:

<string name="txt_click_send_btn">发送按钮被点击了</string>

现在,我们看看效果:

Android不点击跳转页面 安卓点击跳转_android

好了,现在按钮的点击响应我们已经实现了,那么接下来就是该跳转到另外一个Activity了。


创建第二个Activity - SecondActivity

选中我们的项目包,点击鼠标右键,选择New - > Activity ->BlankActivity,类似于前面我们学的,我们设置ActivityName为SecondActivity,然后直接点击Finish,系统就帮我们创建好了SecondActivity.java和activity_second.xml。

注意:所有的Activity的子类都必须重写onCreate()方法,而且,我们必须在onCreate()方法中调用setContentView()方法,关联Activity页面对应的layout布局文件。

现在我们来改写系统为我们生成的activity_second.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">

    <TextView
        android:id="@+id/tv_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="15sp"
        android:textColor="#0000FF"/>

</LinearLayout>

这里我们使用了一个文本显示控件

TextView,并且使用它的

android:textSize和 android:textColor属性设置它的文字大小为15sp,文字颜色为蓝色。它可以用来显示我们从第一个页面传递过来的数据。

创建一个Intent

现在,两个Activity页面都已经有了,我们要怎么跳转呢?要想在当前的Activity页面打开另外一个Activity,我们需要借助一样东西,这个东西就是Intent,我们可以称之为“意图”,我们取创建一个“意图”,一个希望从当前页面到另外一个页面的”意图“:

public void sendMessage(View view){
        Intent intent = new Intent(this,SecondActivity.class);
    }

这样,我们的意图就已经创建好了(提一下:在Android Studio中,我们使用Alt + Enter导入包),然后我们要怎么去将这个意图发送出去呢?我们需要通过Activity类中的

startActivity()方法将这个Intent发送出去。如下:

public void sendMessage(View view){
        Intent intent = new Intent(this,SecondActivity.class);
        startActivity(intent);
    }

代码就这么点,我们去看看效果:

Android不点击跳转页面 安卓点击跳转_Activity跳转_02


这时候点击按钮,已经能跳转到SecondActivity页面了,虽然第二个页面上面内容都没有,现在我们要做的就是,将第一个页面里用户在文本域中输入的内容传递到SecondActivity页面。我们明确下我们要做的事情:

首先,第一步:我们必须获取到第一个页面中的文本域的View对象

第二步:我们必须通过这个文本域的View对象获取到用户输入的内容

第三步:将获取到的内容通过Intent传递到第二个页面

现在我们按照上面的思路继续去修改我们的代码:

public void sendMessage(View view){
        Intent intent = new Intent(this,SecondActivity.class);
        //第一步、通过Activity的findViewById()获取文本域EditText对象  由于findViewById()方法的返回值
        // 是一个View对象  所以我们需要将其向下转型为为文本域EditText对象  参数ID是我们在layout文件activity_my.xml
        //中给文本域设置的android:id属性的值
        EditText edit_messgae = (EditText) findViewById(R.id.edit_message);
        //第二步、通过getText().toString()方法获取到文本域中用户输入的内容
        String message = edit_messgae.getText().toString();
        //第三步、将用户输入的内容通过Intent的putExtra()方法封装进Intent中,随着Intent传递到下一个页面
        //其中的MessageKey就相当于一个房间号,我们通过putExtra()将数据放到了对应的房间中,
        //当取数据时,你要通过这个房间号才能从Intent对应的房间中取出对应的数据
        intent.putExtra("MessageKey",message);
        startActivity(intent);
    }


上面的步骤在注释中已经写得很清楚了,这个时候我们就可以去第二个页面中取数据并且显示到文本框中了。同样,我们分析步骤如下:

第一步:首先我们需要截取到上一个页面传递过来的Intent。因为我们需要的数据在它的"MessageKey房间"里面。

第二步:从Intent中取出数据

第三步:获取到文本框TextView的对象

第四步:将从Intent中取出的内容显示到将文本框TextView上

按照上面的步骤,编写SecondActivity.java中的代码:

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        //第一步 通过getIntent()方法获取从第一个页面传递过来的Intent
        Intent intent = getIntent();
        //根据上一个页面协商好的“房间号”从Intent中取出数据
        String message = intent.getStringExtra("MessageKey");
        //第三步:通过findViewById()方法获取到文本框TextView的对象
        TextView tv_info = (TextView) findViewById(R.id.tv_info);
        //第四步:将从Intent中取出的内容显示到将文本框TextView上
        tv_info.setText(message);
    }

}

好了,现在我们看看APP运行效果:

Android不点击跳转页面 安卓点击跳转_Activity跳转_03

第一个页面的数据已经成功地传递到第二个页面并且显示。

特别注意

在这个项目中,我们在创建第二个Activity页面文件的时候,是通过Android studio提供的New -> Activity -> Blank Activity来完成的,这其中系统帮我们做了很多的工作,比如说,创建SecondActivity.java文件、创建layout布局资源文件、另外还有最重要也是我们新手最容易忽略的一点 : 向项目配置文件AndroidManifest.xml中注册我们新创建的Activity页面组件!

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jim.myfirstproject" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MyActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SecondActivity"
            android:label="@string/title_activity_second"
            >
        </activity>
    </application>

</manifest>

其中的

<activity
            android:name=".SecondActivity"
            android:label="@string/title_activity_second"
            >
        </activity>

部分是我们通过New -> Activity -> Blank Activity创建SecondActivity页面的时候系统帮我们注册的。而且我们项目中用到的每一个Activity都必须在这个文件中注册,否则在我们跳转页面的时候,系统将无法找到我们的Activity。现在我们删除掉系统帮我们的注册信息,再运行APP,会出现如下错误:

Android不点击跳转页面 安卓点击跳转_xml_04

再次提示:项目中用到的每一个Activity都必须在AndroidManifest.xml文件中注册