从零学Android(三)、Activity页面的跳转

在前面的学习中,我们已经创建好了一个拥有一个文本域和一个按钮的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>

现在,我们看看效果:

好了,现在按钮的点击响应我们已经实现了,那么接下来就是该跳转到另外一个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:textSizeandroid: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);
    }
代码就这么点,我们去看看效果:


这时候点击按钮,已经能跳转到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运行效果:

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


特别注意

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

<?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,会出现如下错误:

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


源码下载


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值