【声明】

欢迎转载,但请保留文章原始出处→_→

生命壹号:http://www.cnblogs.com/smyhvae/

文章来源:http://www.cnblogs.com/smyhvae/p/3863720.html

【正文】

一、如何在一个应用程序当中定义多个Activity:

步骤如下:

(1)定义一个类,继承Activity

(2)在该类当中,复写Activity当中的onCreate()方法

(3)在AndroidManifest.xml文件中注册该Activity

详细解释如下:

(1)定义一个类,继承Activity:在src文件夹里面的包中新建一个class文件,可命名为:SecondActivity.java

(2)在该类当中,复写Activity当中的onCreate()方法:在菜单栏选择Source--->Override/Implement Methods,弹出框,选择其中的onCreate()方法:

注:onCreate()方法是Activity运行的入口。

紧接着,在layout文件夹中,为该Activity添加布局文件:(文件名必须为小写)

在该布局文件中添加一个 <TextView />

在SecondActivity.java中设置该Activity所使用的布局文件,即在onCreate()方法中添加如下代码:

setContentView(R.layout.second) ;
(3)在AndroidManifest.xml文件中注册该Activity:(想要启动的Activity一定要先在Manifest文件中进行注册

打开AndroidManifest.xml文件,注意里面的Activity标签,即以下代码:

         <activity
android:name="com.example.test0201_activity01.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> 

代码解释如下:

02行:代表Activity的名字:包名+类名。

03行:label指定活动中标题栏的内容。

04至08行:Activity的子标签,即:

             <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

以上这段代码放在哪个Activity里,那个Activity就作为应用程序默认启动的Activity。即程序运行后的默认启动的Activity。

现在将SecondActivity注册进去,在第一个Activity后面,添加如下代码:

         <activity
android:name="com.example.test0201_activity01.SecondActivity"
android:label="SecondActivity" >
</activity> 
 

二、Android当中的back stack(后退栈):(栈:子弹上膛,先进后出)

android操作系统只显示back stack中最上面的元素(只显示栈顶端的activity)。

在上方的图中,当用户点击后退按钮时,出现以下情况:(最上方的activity将被移除,依此类推)

三、启动一个Activity的方法:即在默认启动的Activity中启动另一个Activity

核心代码如下:

Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class); 

步骤如下:

(1)生成一个意图对象 Intent

(2)调用setClass方法设置所要启动的Activity

(3)调用startActivity方法启动Activity

具体解释如下:

【实例】在第一个Activity点击按钮,来启动第二个Activity;在第二个Activity点击按钮,返回到第一个Activity

(1)生成一个意图对象 Intent (Intent封装了你想做什么这件事)

在布局文件activity_main.xml文件中添加一个button,并在MainActivity.java中生成button的监听器,

生成意图对象的代码如下:

Intent intent = new Intent() ;

(2)调用setClass方法设置所要启动的Activity:

Intent中的setClass方法格式如下:

intent.setClass(packageContext, cls) ;

参数解释如下:

第一个参数:这个context对象即当前activity对象。Activity是context类的子类,此时Activity向上转型了。

第二个参数:表示意图启动的那个Activity 。

(3)调用startActivity方法启动Activity

总而言之,监听器部分的【核心代码】如下:

    class ButtonListener implements OnClickListener {
public void onClick(View v) {
Intent intent = new Intent();
//setClass函数的第一个参数是一个Context对象
//Context是一个类,Activity是Context类的子类,也就是说,所有的Activity对象,都可以向上转型为Context对象
//setClass函数的第二个参数是一个Class对象,在当前场景下,应该传入需要被启动的Activity类的class对象
intent.setClass(MainActivity.this, SecondActivity.class);
startActivity(intent);
} }

核心代码为第04行至第09行。

【完整代码】如下:方案一

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="启动第二个Activity" /> </RelativeLayout>

activity_main.xml

 package com.example.activiychange;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity { private Button button ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button1) ; // button.setOnClickListener(new ButtonListener()) ; //为Button绑定监听器,采用匿名内部类
button.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
//下面这一行,有两种方法。方法一:
Intent intent = new Intent(MainActivity.this,SecondActivity.class) ;
/* //方法二:
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);*/
//备注:setClass函数的第一个参数是一个Context对象
//备注:Context是一个类,Activity是Context类的子类,也就是说,所有的Activity对象,都可以向上转型为Context对象
//备注:setClass函数的第二个参数是一个Class对象,在当前场景下,应该传入需要被启动的Activity类的class对象 startActivity(intent) ;
}
} ); } /* class ButtonListener implements OnClickListener { @Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
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.main, menu);
return true;
} }

MainActivity.java

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="82dp"
android:text="返回" /> </RelativeLayout>

second.xml

 package com.example.activiychange;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class SecondActivity extends Activity { private Button button1 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second); button1 = (Button)findViewById(R.id.button1) ; //为返回按钮绑定监听器
button1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
Intent intent = new Intent(SecondActivity.this,MainActivity.class) ;
startActivity(intent) ;
} }); }
}

SecondActivity.java

并在清单文件中注册SecondActivity,添加如下代码:

         <activity
android:name=".SecondActivity"
android:label="SecondActivity" >
</activity>

AndroidManifest.xml

或者如果不绑定监听器的话,可以对布局文件中的Button添加如下代码:android:onClick="gotoSecondActivity"

【完整代码】如下:方案二

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="22dp"
android:onClick="gotoSecondActivity"
android:text="启动第二个Activity" /> </RelativeLayout>

activity_main.xml

 package com.example.smyh004activity01;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("MainActivity-onCreate");
} @Override
protected void onStart() {
super.onStart();
System.out.println("MainActivity-onStart");
} @Override
protected void onResume() {
super.onResume();
System.out.println("MainActivity-onResume");
} @Override
protected void onPause() {
super.onPause();
System.out.println("MainActivity-onPause");
} @Override
protected void onStop() {
super.onStop();
System.out.println("MainActivity-onStop");
} @Override
protected void onRestart() {
super.onRestart();
System.out.println("MainActivity-onRestart");
} @Override
protected void onDestroy() {
super.onDestroy();
System.out.println("MainActivity-onDestroy");
} /*
* 通过这个方法跳转到SecondActivity界面
*/
public void gotoSecondActivity(View view){
//创建一个意图
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
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.main, menu);
return true;
} }

MainActivity.java

 <?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/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="22dp"
android:onClick="gotoMainActivity"
android:text="回到 第一个Activity" /> </LinearLayout>

second.xml

 package com.example.smyh004activity01;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View; public class SecondActivity extends Activity{ @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
System.out.println("SecondActivity-onCreate");
} @Override
protected void onStart() {
super.onStart();
System.out.println("SecondActivity-onStart");
} @Override
protected void onResume() {
super.onResume();
System.out.println("SecondActivity-onResume");
} @Override
protected void onPause() {
super.onPause();
System.out.println("SecondActivity-onPause");
} @Override
protected void onStop() {
super.onStop();
System.out.println("SecondActivity-onStop");
} @Override
protected void onRestart() {
super.onRestart();
System.out.println("SecondActivity-onRestart");
} @Override
protected void onDestroy() {
super.onDestroy();
System.out.println("SecondActivity-onDestroy");
} /*
* 通过这个方法跳转到SecondActivity界面
*/
public void gotoMainActivity(View view){
//创建一个意图
Intent intent = new Intent(SecondActivity.this,MainActivity.class);
startActivity(intent);
finish();//结束当前的Activity
//如果没有上面的finish(),那么当跳转到MainActivity之后,SecondActivity只会onStop,不会ondestroy。即仍然还在栈中
//需要注意的是,当它跳到MainActivity时,会去重新创建一个新的MainActivity,即执行MainActivity中的onCreate()方法;
} }

SecondActivity.java

并在清单文件中注册SecondActivity,添加如下代码:

         <activity
android:name=".SecondActivity"
android:label=".SecondActivity">
</activity>

生命周期描述如下:

当用户点击当前默认的MainActivity中的按钮后,会跳到SecondActivity。生命周期如下:

启动默认Activity时:

MainActivity:onCreate

MainActivity:onStart

MainActivity: onResume

点击按钮后,跳到SecondActivity:(MainActivity被保留至栈底)

MainActivity:onPause

SecondActivity:onCreate

SecondActivity:onStart

SecondActivity: onResume

MainActivity: onStop

按返回菜单后,回到MainActivity:(SecondActivity被销毁)

SecondActivity: onPause

MainActivity:onRestart

MainActivity:onStart

MainActivity: onResume

SecondActivity: onStop

SecondActivity: onDestroy

当用户打开应用程序,之后按Home键返回到主页(或者按电源键,效果是一样的),再回到原来的程序。生命周期描述如下:

启动默认Activity时:

MainActivity:onCreate

MainActivity:onStart

MainActivity: onResume

按Home键返回到主页:

MainActivity:onPause

MainActivity:onStop

再回到原来的程序:

MainActivity:onRestart

MainActivity:onStart

MainActivity:onResume

方案二的【工程文件】

链接:http://pan.baidu.com/s/1dDhBd7r

密码:jfm9

我的公众号

想学习代码之外的软技能?不妨关注我的微信公众号:生命团队(id:vitateam)。

扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:

Android组件系列----当前Activity跳转到另一个Activity的详细过程的更多相关文章

  1. 由一个activity跳转到另一个activity

    定义一个按钮,当点击的时候跳转到另一个activity的界面 1.新建第二个activity 2.在第二个Java源码处继承第一个activity,导入 3.在source中复写Oncreat方法 4 ...

  2. 【原创】Android 从一个Activity跳转到另外一个Activity

    Android四大组件activity使用,实现两个activity之间的跳转 基本流程:创建两个activity-将其中一个activity中组件作为事件源-通过组件事件的处理借助intent对象实 ...

  3. android 如何从activity跳转到另一个activity下指定的fragment

    思路: 跳转到目标fragment所在的activity,并传递一个flag,来确定要到哪个fragment,根据该flag判断后,跳转到指定的fragment即可. 代码: 当前界面: intent ...

  4. Android组件系列----Activity组件详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  5. Android 组件系列-----Activity生命周期

    本篇随笔将会深入学习Activity,包括如何定义多个Activity,并设置为默认的Activity.如何从一个Activity跳转到另一个Activity,还有就是详细分析Activity的生命周 ...

  6. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  7. Android由一个activity 间隔5秒自动跳转到另外一个activity

    Android由一个activity 间隔5秒自动跳转到另外一个activity 2013年10月10日18:03:42 //一.写一个定时器 5秒后开启        final Intent lo ...

  8. Android官方教程翻译(4)——启动另一个Activity

    Starting Another Activity 启动另一个Activity PREVIOUSNEXT THIS LESSON TEACHES YOU TO 这节课教你 1.   Respond t ...

  9. 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

    1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

随机推荐

  1. Java之集合(十二)TreeMap

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7411935.html 1.前言 本章介绍Map体系中的TreeMap,顾名思义,这个是一个树结构的Map.Tre ...

  2. EF 一对一、一对多、多对多配置语句小记

    数据库实体间的关系无非有这么几种:一对一.一对多.多对多,这些关系在EF框架中分别有不同的创建方式: 1.在"Database First"模式中,这些关系通过SQL语句的方式建立 ...

  3. Spring Security构建Rest服务-0102-Spring Social开发第三方登录之qq登录

    图一 基于SpringSocial实现qq登录,要走一个OAuth流程,拿到服务提供商qq返回的用户信息. 由上篇介绍的可知,用户信息被封装在了Connection里,所以最终要拿到Connectio ...

  4. LogCat里的错误提示 FATAL EXCEPTION: main

    程序一运行闪退. 原因为包冲突,将冲突的包删除即可.

  5. mysql数据库数据监测

    #!/bin/bash MYSQL="mysql -h10.10.10.10 -P8036 -uusername -ppassword --default-character-set=utf ...

  6. C/C++中的static

    一.静态全局变量 理解static关键字之前首先回顾一下C/C++程序的在内存中的分配情况.从低地址到高地址依次分为:代码区.全局数据区.堆区.栈区.函数之外的全局变量和静态变量(包括全局变量和静态变 ...

  7. MapReduce几种提交方式

    本地模式运行 1.在Windows里的IDE直接运行main方法,会将job提交给本地执行器localjobrunner执行 ---本地存放Hadoop安装包 ---输入输出数据可以放在本地路径下(c ...

  8. [POI 2014]RAJ-Rally

    Description 题库链接 给定一个 \(N\) 个点 \(M\) 条边的有向无环图,每条边长度都是 \(1\).请找到一个点,使得删掉这个点后剩余的图中的最长路径最短. \(1\leq N\l ...

  9. NPOI读取Excel官方demo

    关键代码: 读: HSSFWorkbook hssfworkbook; void InitializeWorkbook(string path) { //read the template via F ...

  10. [转]Creating a custom ribbon for Outlook 2013, 2010 and toolbar for Outlook 2007, 2003 – C# sample

    本文转自:https://www.add-in-express.com/creating-addins-blog/2013/05/21/outlook-ui-customization-ribbons ...