【聲明】
歡迎轉載,但請保留文章原始出處→_→
生命壹號: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標簽,即以下代碼:
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
方案二的【工程文件】
鏈接:http://pan.baidu.com/s/1dDhBd7r
密碼:jfm9
我的公眾號
想學習代碼之外的軟技能?不妨關注我的微信公眾號:生命團隊(id:vitateam)。
掃一掃,你將發現另一個全新的世界,而這將是一場美麗的意外: