一个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会结束自己。

运行将看到下图:

单击上图中的按钮将看到下图效果:

建立、配置和使用Activity——启动、关闭Activity的更多相关文章

  1. 建立、配置和使用Activity——启动其他Activity并返回结果

    Activity还提供了一个startActivityForResult(Intent intent,int requestCode)方法来启动其他Activity.该方法用于启动指定Activity ...

  2. 【Android-关闭所有Activity】关闭activity之前的所有activity,重启actibity

    Android关闭activity之前的所有activity,重启actibity 直接关闭一个activity之前的所有Activity页面 解决方法:清理activity堆栈 Intent ine ...

  3. Android零基础入门第74节:Activity启动和关闭

    上一期我们学习了Activity的创建和配置,当时留了一个悬念,如何才能在默认启动的Activity中打开其他新建的Activity呢?那么本期一起来学习如何启动和关闭Activity. 一.概述 经 ...

  4. Activity启动模式 及 Intent Flags 与 栈 的关联分析

     http://blog.csdn.net/vipzjyno1/article/details/25463457    Android启动模式Flags栈Task   目录(?)[+] 什么是栈 栈 ...

  5. Android 面试必备 - 系统、App、Activity 启动过程“一锅端”

    Android 系统启动过程 从系统层看: linux 系统层 Android系统服务层 Zygote 从开机启动到Home Launcher: 启动bootloader (小程序:初始化硬件) 加载 ...

  6. Activity启动创建 (AcitivtyManageService,ActivityThread,Activity)

    ActivityThead,ActivityManagerService,Activity  <<Android内核剖析>>中有一章节专门介绍 Activity框架和管理结构A ...

  7. Activity详解一 配置、启动和关闭activity

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  8. Activity详解一 配置、启动和关闭activity转载 https://www.cnblogs.com/androidWuYou/p/5887726.html

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  9. android窗体动画:activity启动从底部向上滑动出现,关闭的时候从顶部向下滑动消失的动画实现

    在IOS系统里,我们打开app都是有启动动画的,这样子在打开一个新窗体,用户感觉有个过渡动画,体验效果很好,不会觉得很突然就冒出一个窗体,下面就实现一个android 的activity启动和关闭动画 ...

随机推荐

  1. js-转大小写

    .toLowerCase()转小写.toUpperCase();转大写

  2. Phaser小游戏

    本来今天打算阅读AngularJs源代码的,但是上头下来了任务,做个小霸王上面的那种接金蛋的游戏,想象最近系统的学习了一下gulp和之前熟悉了一遍的Phaser,于是就打算用这两个东西一起来做个dem ...

  3. IE11 Windows7下F12 DOC资源管理器不能用Exception in window.onload: Error: An error has ocurredJSPlugin.3005

    ------------------ Diagnostic: Exception in window.onload: Error: An error has ocurredJSPlugin.3005 ...

  4. 基于I2C EPPRPM(AT24C02B) + LCD12864实验

    本次实验目的:在指定的EPPROM地址中,写入一数据,延时100MS后,在从该地址中读取,并在LCD上显示. 该实验在前两天就开始做了,一开始并没有成功,读出的一直0x00,当时也调了一会,但跳回到P ...

  5. python赋值和拷贝----一切皆对象,参数皆引用

    摘要: 1 python中的一切事物皆为对象,并且规定参数的传递都是对象的引用. 2  python参数传递都是"传对象引用"方式.实际上相当于c++中传值和传引用的结合. 3 如 ...

  6. EXCEL读写NPOI--导出功能

    第一步:将NPOI中的一下三个文件复制到项目中

  7. ural1494 Monobilliards

    Monobilliards Time limit: 1.0 secondMemory limit: 64 MB A monobilliards table set up in a gaming hou ...

  8. web前端性能优化指南

    web前端性能优化指南 web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loadin ...

  9. perties类的操作

    http://www.cnblogs.com/bakari/p/3562244.html perties类的操作   知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源 ...

  10. PHP和MySQL Web开发(原书第4版) 高清PDF+源代码

    PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区  作者:Linux [字体:大 中 小]     内容简介 <PHP和My ...