Android组件系列----当前Activity跳转到另一个Activity的详细过程

【正文】 

一、如何在一个应用程序当中定义多个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标签,即以下代码:

1         <activity
2             android:name="com.example.test0201_activity01.MainActivity"
3             android:label="@string/app_name" >
4             <intent-filter>
5                 <action android:name="android.intent.action.MAIN" />
6                 <category android:name="android.intent.category.LAUNCHER" />
7             </intent-filter>
8         </activity> 

代码解释如下:

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

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

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

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

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

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

1         <activity
2             android:name="com.example.test0201_activity01.SecondActivity"
3             android:label="SecondActivity" >
4         </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行。

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

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10
11     <Button
12         android:id="@+id/button1"
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:text="启动第二个Activity" />
16
17 </RelativeLayout>

 

 1 package com.example.activiychange;
 2
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10
11 public class MainActivity extends Activity {
12
13     private Button button ;
14
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19
20         button = (Button)findViewById(R.id.button1) ;
21
22        // button.setOnClickListener(new ButtonListener()) ;
23
24        //为Button绑定监听器,采用匿名内部类
25         button.setOnClickListener(new OnClickListener() {
26
27             @Override
28             public void onClick(View arg0) {
29                 //下面这一行,有两种方法。方法一:
30                 Intent intent = new Intent(MainActivity.this,SecondActivity.class) ;
31 /*                //方法二:
32                 Intent intent = new Intent();
33                 intent.setClass(MainActivity.this, SecondActivity.class);*/
34                 //备注:setClass函数的第一个参数是一个Context对象
35                 //备注:Context是一个类,Activity是Context类的子类,也就是说,所有的Activity对象,都可以向上转型为Context对象
36                 //备注:setClass函数的第二个参数是一个Class对象,在当前场景下,应该传入需要被启动的Activity类的class对象
37
38                 startActivity(intent) ;
39             }
40         } );
41
42     }
43
44 /*    class ButtonListener implements OnClickListener {
45
46         @Override
47         public void onClick(View arg0) {
48             Intent intent = new Intent();
49             intent.setClass(MainActivity.this, SecondActivity.class);
50             startActivity(intent) ;
51         }
52
53     }*/
54
55
56     @Override
57     public boolean onCreateOptionsMenu(Menu menu) {
58         // Inflate the menu; this adds items to the action bar if it is present.
59         getMenuInflater().inflate(R.menu.main, menu);
60         return true;
61     }
62
63 }

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5
 6     <Button
 7         android:id="@+id/button1"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:layout_alignParentRight="true"
11         android:layout_alignParentTop="true"
12         android:layout_marginRight="82dp"
13         android:text="返回" />
14
15 </RelativeLayout>

 

 1 package com.example.activiychange;
 2
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9
10 public class SecondActivity extends Activity {
11
12     private Button button1 ;
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.second);
17
18         button1 = (Button)findViewById(R.id.button1) ;
19
20         //为返回按钮绑定监听器
21         button1.setOnClickListener(new OnClickListener() {
22
23             @Override
24             public void onClick(View arg0) {
25                 Intent intent = new Intent(SecondActivity.this,MainActivity.class) ;
26                 startActivity(intent) ;
27             }
28
29         });
30
31
32     }
33 }

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


1         <activity
2             android:name=".SecondActivity"
3             android:label="SecondActivity"  >
4         </activity>

 

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

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

 

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10
11     <TextView
12         android:id="@+id/textView1"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:text="@string/hello_world" />
16
17     <Button
18         android:id="@+id/button1"
19         android:layout_width="wrap_content"
20         android:layout_height="wrap_content"
21         android:layout_below="@+id/textView1"
22         android:layout_marginTop="22dp"
23         android:onClick="gotoSecondActivity"
24         android:text="启动第二个Activity" />
25
26 </RelativeLayout>

 

 

 1 package com.example.smyh004activity01;
 2
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.view.View;
 8
 9 public class MainActivity extends Activity {
10
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15         System.out.println("MainActivity-onCreate");
16     }
17
18     @Override
19     protected void onStart() {
20         super.onStart();
21         System.out.println("MainActivity-onStart");
22     }
23
24     @Override
25     protected void onResume() {
26         super.onResume();
27         System.out.println("MainActivity-onResume");
28     }
29
30     @Override
31     protected void onPause() {
32         super.onPause();
33         System.out.println("MainActivity-onPause");
34     }
35
36     @Override
37     protected void onStop() {
38         super.onStop();
39         System.out.println("MainActivity-onStop");
40     }
41
42
43     @Override
44     protected void onRestart() {
45         super.onRestart();
46         System.out.println("MainActivity-onRestart");
47     }
48
49
50     @Override
51     protected void onDestroy() {
52         super.onDestroy();
53         System.out.println("MainActivity-onDestroy");
54     }
55
56
57     /*
58      * 通过这个方法跳转到SecondActivity界面
59      */
60     public void gotoSecondActivity(View view){
61         //创建一个意图
62         Intent intent = new Intent(MainActivity.this,SecondActivity.class);
63         startActivity(intent);
64     }
65
66     @Override
67     public boolean onCreateOptionsMenu(Menu menu) {
68         // Inflate the menu; this adds items to the action bar if it is present.
69         getMenuInflater().inflate(R.menu.main, menu);
70         return true;
71     }
72
73 }

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6
 7      <TextView
 8         android:id="@+id/textView1"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:text="@string/hello_world" />
12
13     <Button
14         android:id="@+id/button1"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:layout_below="@+id/textView1"
18         android:layout_marginTop="22dp"
19         android:onClick="gotoMainActivity"
20         android:text="回到 第一个Activity" />
21
22 </LinearLayout>

 

 1 package com.example.smyh004activity01;
 2
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.view.View;
 8
 9 public class SecondActivity extends Activity{
10
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         // TODO Auto-generated method stub
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.second);
16        System.out.println("SecondActivity-onCreate");
17     }
18
19     @Override
20     protected void onStart() {
21         super.onStart();
22         System.out.println("SecondActivity-onStart");
23     }
24
25     @Override
26     protected void onResume() {
27         super.onResume();
28         System.out.println("SecondActivity-onResume");
29     }
30
31     @Override
32     protected void onPause() {
33         super.onPause();
34         System.out.println("SecondActivity-onPause");
35     }
36
37     @Override
38     protected void onStop() {
39         super.onStop();
40         System.out.println("SecondActivity-onStop");
41     }
42
43
44     @Override
45     protected void onRestart() {
46         super.onRestart();
47         System.out.println("SecondActivity-onRestart");
48     }
49
50
51     @Override
52     protected void onDestroy() {
53         super.onDestroy();
54         System.out.println("SecondActivity-onDestroy");
55     }
56
57     /*
58      * 通过这个方法跳转到SecondActivity界面
59      */
60     public void gotoMainActivity(View view){
61         //创建一个意图
62         Intent intent = new Intent(SecondActivity.this,MainActivity.class);
63         startActivity(intent);
64         finish();//结束当前的Activity
65         //如果没有上面的finish(),那么当跳转到MainActivity之后,SecondActivity只会onStop,不会ondestroy。即仍然还在栈中
66         //需要注意的是,当它跳到MainActivity时,会去重新创建一个新的MainActivity,即执行MainActivity中的onCreate()方法;
67     }
68
69 }

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

1         <activity
2             android:name=".SecondActivity"
3             android:label=".SecondActivity">
4         </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

时间: 2025-01-19 21:11:39

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

界面-Android 从activity跳转进入另一个activity内viewpager的指定页面

问题描述 Android 从activity跳转进入另一个activity内viewpager的指定页面 求助: 现在的需求是, 要从activityA跳转进入另一个activityB内viewpager的第4个界面 (activityB一共有4个fragment组成viewpager) 注:看清需求,不是activityA跳转到activityB,而是要跳转到activityB内部viewpager里面的一个指定页面 解决方案 直接在activityB中设置viewPager.setCurre

android项目出错-android项目中从一个Activity跳转到另外一个Activity发生空指针异常是什么原因造成的

问题描述 android项目中从一个Activity跳转到另外一个Activity发生空指针异常是什么原因造成的 android项目中从一个Activity跳转到另外一个Activity发生空指针异常是什么原因造成的 解决方案 具体得log信息啊.你把log 截取出来看看. 解决方案二: 你把logcat里的红字贴出来 解决方案三: 你把logcat里的红字贴出来 解决方案四: 你把logcat里的红字贴出来 解决方案五: 你把logcat里的红字贴出来

android项目activity跳转到另外一个Activity遇到空指针异常问题

问题描述 android项目activity跳转到另外一个Activity遇到空指针异常问题 android项目activity跳转到另外一个Activity遇到空指针异常问题 如何解决这个问题啊 解决方案 拿出你的代码,不然怎me看 解决方案二: 你是不是传值或者控件没有findViewById.具体要看下log 解决方案三: log 贴出来,代码也贴出来

页面跳转-请教一个Activity跳转到另外一个Activity失败的问题

问题描述 请教一个Activity跳转到另外一个Activity失败的问题 package com.example.t; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; impo

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

[正文] 注:四大组件指的是应用组件:Activity.Service.BroadcastReceiver.ContentProvider:之前的控件指的是UI组件. 博文目录: 一.Activity简介 二.Activity的状态和生命周期 三.Activity的基本用法 四.向下一个Activity传递数据 五.返回数据给上一个Activity 六.Activity运行时屏幕方向与显示方式 七.Activity的现场保存 八.Activity通过SharedPreferences保存数据 一

android-一个Activity实时监听另一个Activity中参数的变化

问题描述 一个Activity实时监听另一个Activity中参数的变化 假如我有两个Activity:Activity(A)和Activity(B) Activity(A)中有一个按钮,有两种状态 开始 和 暂停 用户可以点击按钮控制 开始 或 暂停 当 开始 时 Activity(B)要进行一种操作,当 暂停 时,Activity(B)要进行另一种操作. 请问如何让Activity(B)即时获取Activity(A)中按钮的状态呢? 解决方案 android中如何添加一个监听按钮,点击之后从

Android官方入门文档[14]停止和重新启动一个Activity活动

Android官方入门文档[14]停止和重新启动一个Activity活动 Stopping and Restarting an Activity停止和重新启动一个Activity活动   This lesson teaches you to1.Stop Your Activity2.Start/Restart Your Activity You should also read•Activities 这节课教你1.停止您的Activity活动2.启动/重新启动您的Activity活动 你也应该阅

activity-全屏Activity跳到非全屏Activity后出现显示问题

问题描述 全屏Activity跳到非全屏Activity后出现显示问题 工作中碰到一个问题,从全屏Activity跳到非全屏Activity后,第二个Activity出现先全屏显示,再非全屏显示的问题.就好像状态栏将全屏的Activity硬生生的挤成非全屏. 请问这是为什么?Android本身的机制?有高手能解释一下吗? 解决方案 使用Animation,在切换Activity的时候将透明度设为0 慢慢变成100% 可以解决这个问题. 解决方案二: 这两个过程连起来看就像动画片一样会动起来 就好

如何结束surfaceview跳转到另一个activity类中

问题描述 如何结束surfaceview跳转到另一个activity类中 我做的一个游戏,用的surfaceview画图,现在我想在游戏结束的时候结束surfaceview的画图然后跳转到另一个activity类里重新开始游戏 解决方案 surfaceview所在的activity相互访问可以通过内部类,也可以把当前activity,但最好定义一个内部类,便于维护和理解这是和surfaceview交互的. activity定义内部类class CallBack(){ public void se