• Android:当前Activity跳转到另一个Activity


    转载自: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>
    复制代码
    复制代码
     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"

    生命周期描述如下:

    当用户点击当前默认的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

  • 相关阅读:
    技术晨读_20160611
    浏览器退出之后php还会继续执行么?
    大话keepalive
    也说说TIME_WAIT状态
    PHP的错误机制总结
    ASP.NET MVC中使用Unity Ioc Container
    Unity依赖注入使用详解
    小菜学习设计模式(五)—控制反转(Ioc)
    程序员的人性思考(续)
    Delegate、Predicate、Action和Func
  • 原文地址:https://www.cnblogs.com/doggod/p/12104774.html
Copyright © 2020-2023  润新知