【Android develop】【学习笔记005】打开另一个activity

来源:互联网 发布:八本兵种等级数据 编辑:程序博客网 时间:2024/06/09 20:40

转自:http://www.cnblogs.com/superdo/p/4551420.html点击打开链接

打开另一个Activity

这篇文章你会学到的东西:1、如何给按钮添加响应事件。  2、创建一个Intent。3、创建一个新的Activity。4、点击按钮,打开另一个Activity。5、接收Intent。6、用Intent在Activity之间传输信息。


如果你完成了前面的几节课程,你已经创建好了一个app,就像这样:

但这个app一点用处都没有,上面的输入框,没有任何的功能,非常的无聊。来,
我们给它加上一些功能,让它变得有趣起来。我们可以往输入框输入一些东西,点击【发送】,就会弹出另一个界面,这个界面上显示的是发送的信息。

给按钮加入响应事件

为了给按钮加入响应事件。我们要做几个事情。

在activity_main.xml中,添加按钮响应方法。

修改activity_main.xml,我们在button标签中,添加onClick属性。sendMessage是这个button点击的时候会执行的方法。如下:

复制代码
1     <Button2         android:id="@+id/btn_send_message"3         android:layout_width="wrap_content"4         android:layout_height="wrap_content"5         android:text="@string/button_send"6         android:onClick="sendMessage" />
复制代码

那sendMessage的方法,在哪里写,button才能调用的到?答案是:要把这个方法写在button所在的Activity里。
在com.babybus.study.firstapp.MainActivity里,添加sendMessage:

1     public void sendMessage(View v) {2 3     }

这样方式写的按钮,响应方法必须有这几点要求:
1. 必须是公共方法
2. 返回参数必须是void类型
3. 只有一个View作为它的参数(这个View其实就是被点击的button。我们在前面的课程已经学过,布局文件上的所有的东西其实都是View或者View Group的子类。)

Note:给按钮添加响应事件,除了上面的写法,还有另外一种方式,就是直接在代码中给button添加响应方法。这种方法,你不需要在xml文件中给按钮增加onClick属性。代码如下:  
复制代码
        Button mButton = (Button) this.findViewById(R.id.btn_send_message);        mButton.setOnClickListener(new View.OnClickListener() {                        @Override            public void onClick(View v) {                // 做响应的事                            }        });
复制代码

接下来,我们要给这个方法加入一个功能:可以获取输入框中的内容,并把内容发送给另一个Activity。

创建一个Intent

在MainActivity的sendMessage()方法中,我们创建一个Intent来打开DisplayMessageActivity(另一个Activity,这个Activity的创建我们后面会讲到。) 代码如下:

    public void sendMessage(View v) {        EditText mEditText = (EditText) this.findViewById(R.id.edit_message);        String message = mEditText.getText().toString();        Intent intent = new Intent(this, DisplayMessageActivity.class);    }
Note:此刻这段代码会提示错误,因为我们还没有创建DisplayMessageActivity,没有关系,后面我们会创建它。

Intent,翻译过来是意图的意思。可以用它来给组件们(这里是两个Activity)传递信息。Intent还可以做许多其他的事情,如接受广播机制发送过来的消息等,但最经常的就是用它来在Activity之间传递消息了。
在MainActivity上,我们导入Intent类。

import android.content.Intent;


在sendMessage方法中,我们加入下面的代码:

intent.putExtra(EXTRA_MESSAGE, message);

Intent可以携带extra(它是一个封装了键和值的数据),putExtra()方法中,第一个参数是Key,第二个参数是Value。) 
我们添加一个静态的成员变量来定义一个EXTRA_MESSAGE。

    public static final String EXTRA_MESSAGE = "com.babybus.study.firstapp.MESSAGE";

为了让另一个Activity能查询到extra,我们对key的定义,建议要定义成公共的静态方法。并且有一个通用的非常好的习惯就是,在定义key值,要加上包名作为前缀。这可以保证在和其他组件或者应用交互的时候,保证key的唯一性。) 
在sendMessage方法中,我们使用startActivity来发送Intent。调用startActivity方法,安卓系统会接收到一个指令,这个指令告诉系统要打开Intent设定的另一个Activity。至此,sendMessage中完整的代码是这样:

复制代码
    public void sendMessage(View v) {        EditText mEditText = (EditText) this.findViewById(R.id.edit_message);        String message = mEditText.getText().toString();        Intent intent = new Intent(this, DisplayMessageActivity.class);        intent.putExtra(EXTRA_MESSAGE, message);        this.startActivity(intent);    }
复制代码

创建另一个Activity

我们创建DisplayMessageActivity。 在DisplayMessageActivity的onCreate方法中,添加如下代码:

复制代码
package com.babybus.study.firstapp;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class DisplayMessageActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_display_message);            }}
复制代码

我们也定义一个DisplayMessageActivity的布局文件,记得在res/layout中创建一个。代码如下:

复制代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >        <TextView         android:id="@+id/textview_display_message"        android:layout_width="wrap_content"        android:layout_height="wrap_content"/></LinearLayout>
复制代码

我们创建了一个新的Actiivty,需要在AndroidManifest.xml注册,这个大管家(清单)管理着所有的组件。

        <activity            android:name="com.babybus.study.firstapp.DisplayMessageActivity"            android:label="@string/display_message_activity_name" >        </activity>

到此为止,运行App,点击按钮,就会打开DisplayMessageActivity。但这个时候,如果你在输入框输入内容,点击【发送】,DisplayMessageActivity还是无法展示信息。我们接下来要做的,就是获取MainActivity发送过来的内容,在DisplayMessageActivity的TextView展示出来。

接收Intent

在DisplayMessageActivity的onCreate方法中,我们添加代码:

Intent intent = getIntent();

从Intent获取extra把内容显示出来。

在DisplayMessageActivity的onCreate方法中,我们获得Intent传递过来的内容。并把它展示出来。代码如下:

        String message = intent.getExtras().getString(MainActivity.EXTRA_MESSAGE);        TextView mTextView = (TextView) this.findViewById(R.id.textview_display_message);        mTextView.setText(message);

 

至此,一个完整的小应用就做好了。运行app,在输入框输入一些内容,点击【发送】,会在另一个Activity上显示刚才输入的内容。DisplayMessageActivity完整代码如下:

复制代码
package com.babybus.study.firstapp;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class DisplayMessageActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_display_message);                Intent intent = getIntent();        String message = intent.getExtras().getString(MainActivity.EXTRA_MESSAGE);        TextView mTextView = (TextView) this.findViewById(R.id.textview_display_message);        mTextView.setText(message);    }}

0 0
原创粉丝点击