android开发教程启动其他的Activity
启动其他的Activity
在完成上一课(建立简单的用户界面)后,你已经拥有了显示一个activity(唯一屏幕)的app(应用),并且这个activity包含了一个文本字段和一个按钮。 在这节课中,你将会添加一些新的代码到MainActivity中,当用户点击发送(Send)按钮时启动一个新的activity。
响应Send(发送)按钮
响应按钮的on-click(点击)事件,打开fragment_main.xml布局文件然后在Button(按钮)元素中添加android:onclick属性:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"//sendMessage is the method name
/>
android:onclick属性的值"sendMessage"就是当用户点击你屏幕按钮时触发方法的名字。
添加相应的方法在MainActivity类中:
/** 当用户点击按钮时会被调用 */
public void sendMessage(View view) {
// 响应按钮的事件处理逻辑
}
请注意,为了让系统能够将这个方法(你刚在MyFirstActivity中添加的sendMessage方法)与在android:onClick属性中提供的方法名字匹配,它们的名字必须一致,特别是,这个方法必须满足以下条件:
公共的
没有返回值
有唯一的视图(View)参数(这个视图就是将被点击的视图)
接下来,你可以在这个方法中编写读取文本内容的代码,并将该内容传到另一个Activity。
构建一个Intent
Intent是在不同组件中提供运行时连接的对象(比如两个Activity)。Intent代表一个应用"想去做什么事",你可以用它做各种各样的任务,不过大部分的时候他们被用来启动另一个Activity。
在sendMessage()方法中创建一个Intent并启动名为DisplayMessageActivity的Activity:
Intent intent = new Intent(this, DisplayMessageActivity.class);
在这之前你需要导入Intent类:
import android.content.Intent;
Tip:在中,按 + enter可以导入缺失的类(在Mac中使用Cmd + Shift + O )
在这个Intent构造函数中有两个参数:
第一个参数是Context(之所有可以用this是因为当前Activity(MyFirstActivity)是Context的子类)
系统需要传递Intent的应用组件的class对象(在这个案例中,为应该被启动的activity)。
Note:如果你正在使用的是类似Eclipse的IDE,这里对DisplayMessageActivity的引用会报错,因为这个类还不存在;暂时先忽略这个错误,你很快就要去创建这个类了。
一个Intent(意图)不仅允许你启动另一个Activity,同时也可以传递一个数据包到另一个Activity,在sendMessage()方法里用方法得到EditText元素,然后将它的文本信息添加到Intent(意图):
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
Note:你需要导入android.widget.EditText类,再定义EXTRA_MESSAGE的值。
Intent可以携带各种数据类型的集合的key-value附加对,称作extras。?putExtra()方法把键名作为第一个参数,把值作为第二个参数。putExtra(),参见putExtra()
为了让下一个activity能够查询额外数据(extra data),应该用公共常量为Intent定义键。所以把EXTRA_MESSAGE定义添加到MainActivity类:
public class MainActivity extends ActionBarActivity {