zoukankan      html  css  js  c++  java
  • Android组件系列----当前Activity跳转到另一个Activity的详细过程

    【声明】

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

    生命壹号: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()方法:

    clip_image004

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

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

    clip_image006

    在该布局文件中添加一个 <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>
    activity_main.xml

     

     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 }
    MainActivity.java

     

     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>
    second.xml

     

     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.java

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

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

     

    或者如果不绑定监听器的话,可以对布局文件中的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>
    activity_main.xml
     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 }
    MainActivity.java
     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>
    second.xml
     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.java

    并在清单文件中注册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

    方案二的【工程文件】

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

    密码:jfm9

    我的公众号

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

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

  • 相关阅读:
    LeetCode 264. Ugly Number II
    LeetCode 231. Power of Two
    LeetCode 263. Ugly Number
    LeetCode 136. Single Number
    LeetCode 69. Sqrt(x)
    LeetCode 66. Plus One
    LeetCode 70. Climbing Stairs
    LeetCode 628. Maximum Product of Three Numbers
    Leetcode 13. Roman to Integer
    大二暑假周进度报告03
  • 原文地址:https://www.cnblogs.com/qianguyihao/p/3863720.html
Copyright © 2011-2022 走看看