建立、配置和使用Activity——启动、关闭Activity
一个Android应用通常都会包含多个Activity,但只有一个Activity会作为程序的入口——当该Android应用运行时将会自启动并执行该Activity。至于应用中的其他Activity,通常都由入口Activity启动,或由入口Activity启动的Activity启动。
Activity启动其他Activity有如下两个方法。
- startActivity(Intent intent):启动其他Activity。
- startActivityForResult(Intent intent,int requestCode):以指定指定的请求码(requestCode)启动Activity,而且程序将会等到新启动Activity的结果(通过重写onActivityResult(...)方法来获取)。
启动Activity时可指定一个requestCode参数,该参数代表了启动Activity的请求码。这个请求码的值由开发者根据业务自行设置,用于标识请求来源。
上面两个方法都用到了Intent参数,Intent是Android应用里各组件之间通信的重要方式一个Activity通过Intent来表达自己的“意图”——想要启动哪个组件,被启动的组件即可是Activity组件,也可是Service组件。
Android为关闭Activity准备了如下两个方法。
- finish():结束当期Activity。
- finishActivity(int requestCode):结束以startActivityForResult(Intent intent,int requestCode)方法启动的Activity。
下面的示例程序示范了如何启动Activity,并允许程序在两个Activity之间切换。
第一个Activity的界面布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动第二个Activity"/> </LinearLayout>
对应的Java代码如下:
package com.example.studyactivity; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class StartActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); //获取应用程序的bn按钮 Button bn=(Button)findViewById(R.id.bn); //为bn按钮绑定事件监听器 bn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //创建需要启动的Activity对应的Intent Intent intent=new Intent(StartActivity.this,SecondActivity.class); //启动intent对应的Activity startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.start, menu); return true; } }
上面的程序中粗体字代码就是在Activity中启动其他Activity的关键代码。
程序中第二个Activity的界面同样简单:它只包含两个按钮,一个按钮用于简单的返回上一个Activiy(并不关闭自己),另一个按钮用于结束自己并返回上一个Activity。
第二个Activity的界面布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/previous" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="返回"/> <Button android:id="@+id/close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="返回并关闭自己"/> </LinearLayout>
下面是第二个Activity的Java代码。
package com.example.studyactivity; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); //获取应用程序中的previous按钮 Button previous=(Button)findViewById(R.id.previous); //获取应用程序的close按钮 Button close=(Button)findViewById(R.id.close); //为previous按钮绑定事件监听器 previous.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //获取启动当前Activity的上一个Intent Intent intent=new Intent(SecondActivity.this,StartActivity.class); //启动intent对应的Activity startActivity(intent); } }); //为close按钮绑定事件监听器 close.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //获取当前Activity的上一个Intent Intent intent=new Intent(SecondActivity.this,StartActivity.class); //启动Intent对应的Activity startActivity(intent); //结束当前Activity finish(); }}); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.second, menu); return true; } }
上面的程序中两个按钮的监听器里的代码只有一行区别:finish(),如果有这行代码,则表明该Activity会结束自己。
运行将看到下图:
单击上图中的按钮将看到下图效果: