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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM