[安卓基础] 006.打开另一个Activity
打开另一个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 <Button 2 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); } }
本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4551420.html