Android開發學習 之 四、Activity

來源:互聯網
上載者:User

標籤:android   xml   控制項   

                                            四、Activity4.1 Activity

Activity是應用程式的入口。負責建立才視窗(setContextView(View)),和使用者互動等。

 

4.1.1 基本用法

首先定義一個類繼承自android.app.Activity,在AndroidManifest.xml檔案的application標籤裡聲明一個activity即可。

一般一個程式可能會有多個Activity,需要指定程式運行時首先載入的Activity,在activity標籤內部需要定義action 和category 。首先運行這個Activity。

 

一個Activity例子。設定ContentView,擷取視圖上的按鈕,添加事件。

Java代碼  
  1. public class ActivityMainExample extends Activity implements View.OnClickListener {  
  2.   
  3.     private Button button1;  
  4.     private Button button2;  
  5.     private Button button3;  
  6.   
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         Log.v(CommonConfig.LOG_TAG, "ActivityExample onCreate");  
  10.         super.onCreate(savedInstanceState);  
  11.         super.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  12.         super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
  13.         super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  14.         super.setContentView(R.layout.main);  
  15.         this.button1 = (Button) super.findViewById(R.id.button1);  
  16.         this.button2 = (Button) super.findViewById(R.id.button2);  
  17.         this.button3 = (Button) super.findViewById(R.id.button3);  
  18.   
  19.         this.button1.setOnClickListener(this);  
  20.         this.button2.setOnClickListener(this);  
  21.         this.button3.setOnClickListener(this);  
  22.     }  
  23.   
  24.     @Override  
  25.     public void onClick(View v) {  
  26.         if (v.equals(this.button1)) {  
  27.               
  28.         } else if (v.equals(this.button2)) {  
  29.               
  30.         } else if (v.equals(this.button3)) {  
  31.         }  
  32.     }  
  33. }  
 

 

 

AndroidManifest配置。

Xml代碼  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="liming.activity.example"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <activity android:name=".ActivityMainExample"  
  8.                   android:label="mainActivity"  
  9.                   android:launchMode="standard">  
  10.             <intent-filter>  
  11.                 <action android:name="android.intent.action.MAIN" />  
  12.                 <category android:name="android.intent.category.LAUNCHER" />  
  13.             </intent-filter>  
  14.         </activity>  
  15.     </application>  
  16.     <uses-sdk android:minSdkVersion="7" />  
  17.   
  18. </manifest>  
 

 

 

4.1.2 常用設定

AndroidManifest中的通常設定:

android:launchMode

啟動模式

standard,singleTop,singleTask ,singleInstance,

android:screenOrientation

螢幕

landscape橫屏,portrait豎屏

android:label

標題名稱

直接寫字元,或引用xml檔案中的@string/

android:name

Activity類名

注意.。一般是manifest的package加name等於Activity類帶包名的全稱

 

 

 

Java常用方法

setContentView()

設定Activity視圖

參數可以是①res/layout中的xml檔案,通過R.layout擷取int的id。②View類型的視圖。

findViewById

尋找View,在XML

R中的id。一般設定setContentView為R中的layout,通過這個方法尋找每個組件的引用。

 

 

 

 

 

 

Java其他方法

去標題

super.requestWindowFeature(Window.FEATURE_NO_TITLE)需要在執行setContentView之前操作,否則報錯。

全屏

super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

橫豎向

super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);/ ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

螢幕參數widht,height,dpi等

Display display = super.getWindowManager().getDefaultDisplay();

DisplayMetrics displayMetrics = new DisplayMetrics();

display.getMetrics(displayMetrics);

display.getWidth()等方法

displayMetrics.densityDpi等方法

 

 

 

 

4.1.3 生命週期


Activity有7個生命週期。Activity程式入口為方法onCreate或onStart。一些初始化的操作需要在這兩個方法中進行,例如設定layout,初始化控制項,添加事件監聽等。

每次啟動Activity都是從OnCreare開始,接著onStart,onResume。

按Back鍵就結束程式:onPause,onStop,onDestroy;

按home鍵切換程式:onPause,onStop,切換回來:onRestart,onStrat,onResume。

在兩個以上Activity切換時。Activity是否被Destroy取決於啟動模式launchMode。

 

 

onCreate

當首次建立Activity時調用。一些設定在該方法中進行:建立視圖,資料繫結等。還以Bundle的形式提供以前儲存的任何狀態的訪問。

onRestart

重新啟動Activity時調用。該活動仍在記憶體中,而不是重起一個新的Activity。

onStart

當Activity在螢幕上可見時調用。跟著onResume(),

onResume

當Activity與使用者互動時調用。

onPause

在系統啟動恢複前一個活動時調用。這通常用於未儲存的更改提交到持久性資料、 停止動畫和其他可能會佔用 CPU 等的東西。此方法的實現必須非常快速,因為此方法返回之前不會恢複的下一個活動。跟或 onResume(),如果活動返回到前面或 onStop(),如果它變得對使用者不可見。

onStop

因為另一項Activity已恢複或啟動,這個Activity已不再對的使用者可見時調用。這可能發生或者因為正在啟動一項新的Activity,現有之前的這一個Activity或被銷毀。如果這個Activity出錯或失敗將 onDestroy(),如果被使用者重新選中則調用 onRestart()。

onDestroy

Activity被銷毀前的最後調用。發生這種情況是因為Activity被finishing (或稱為 finish() ,或因為系統暫時銷毀此活動的Activity以節省空間的。您可以使用 isFinishing() 方法,區分這兩種情況。

 

 

 

 

4.2.4 Activity載入模式

在設定檔中android:launchMode可以進行配置Activity載入模式。四種activity的載入模式:standard,singleTop,singleTask,singleInstance。

1. standard:預設,表示如果需要就建立。這樣會導致,切換一次Activity,就建立一個。切換多少次,按back鍵就會返貨多少次。

例如ActivityMain使用standard模式,當他轉到ActivityOtherOne,又切換到ActivityMain時,原先在ActivityMain上面的EditText最開始輸入的文字也就沒有了。

2. singleTop:如果已經有一個這個Activity執行個體位於Activity棧的頂部時,就不產生新的執行個體。

3. singleTask: 會在一個新的task 中產生這個執行個體,以後每次調用都會使用這個,不會去產生新的執行個體了。

4. singleInstance: 這個跟singleTask基本上是一樣,只有一個區別:在這個模式下的Activity執行個體所處的task 中,只能有這個activity執行個體,不能有其他的執行個體。

 

 

4.2 Activity切換

首先簡單介紹Intent(意圖)。Intent類相當於平台中應用程式之間的通訊網路,Intent是一個要執行的操作的抽象說明,相當於各個Activity之間的橋樑。在一個Activity中想切換到另一個Activity,需要使用方法startActivity,並需要定義一個Intent來指定意圖的組件類。

 

4.2.1最簡單的Activity切換

定義Intent,使用Intent設定需要切換到哪個Activity。使用Activity的startActivity(Intent)方法。

Java代碼  
  1. Intent intent = new Intent(this, ActivityOtherOne.class);  
  2. super.startActivity(intent);  
 

 

 

4.2.2使用Intent傳遞資料

當然也可以在切換Activity的時候傳遞資料。可以直接使用intent的putExtra方法,也可以new一個Bundle傳輸入,但是需要讓intent把bundle進行putExtras下。

 

傳參數端的Activity:

Java代碼  
  1. Intent intent = new Intent(this, ActivityOtherOne.class);  
  2. Bundle bundle = new Bundle();  
  3. bundle.putString("value1", "hello");  
  4. intent.putExtras(bundle);  
  5. intent.putExtra("value2","world");  
  6. super.startActivity(intent);  
 

 

 

接收方,例子中的ActivityOtherOne。需要在OnCreate方法中擷取。

Java代碼  
  1. @Override  
  2. protected void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4. .  
  5. .  
  6. .  
  7.     String value1 = super.getIntent().getExtras().getString("value1");  
  8.     String value2 = super.getIntent().getExtras().getString("value2");  
  9.     this.myEditText.setText("value1: " + value1 + ", value2: " + value2);  
  10. }  
 

 

 

 

4.2.3帶回傳資料的

1,在主Activitiy(ActivityMainExample)需要使用startActivityForResult方法切換Activity。其中第二個參數requestCode,只有當>= 0,在轉會此Activity時才會調用onActivityResult方法,得到回傳資料。

 

ActivityMainExample類中代碼

Java代碼  
  1. Intent intent = new Intent(this, ActivityOtherOne.class);  
  2. Bundle bundle = new Bundle();  
  3. bundle.putString("value1", "hello");  
  4. intent.putExtras(bundle);  
  5. intent.putExtra("value2","world");  
  6. super.startActivityForResult(intent, 1);  
 

 

 

重寫onActivityResult方法,擷取回傳資料

Java代碼  
  1. @Override  
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  3.     String result1 = data.getExtras().getString("result1");  
  4.     String result2 = data.getExtras().getString("result2");  
  5.     Log.v(CommonConfig.LOG_TAG, "ActivityExample onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode);  
  6.     Log.v(CommonConfig.LOG_TAG, "ActivityExample onActivityResult data - result1: " + result1 + ", result2: " + result2);  
  7. }  
 

 

 

 

2,在另一個Activity插入回傳資料,然後finish。

 

ActivityOtherTwo類中代碼。

Java代碼  
  1. @Override  
  2. public void onClick(View v) {  
  3.     super.getIntent().putExtra("result1", "hello android");  
  4.     super.getIntent().putExtra("result2", "hello google");  
  5.     super.setResult(Activity.RESULT_OK, super.getIntent());  
  6.     super.finish();  
  7. }  
 

 

 

 

4.3 其他常用的Activity


一些常用的Activity子類,後面將詳細說明如何使用。寫好後更新連結地址

ActivityGroup http://limingnihao.iteye.com/

TabActivity http://limingnihao.iteye.com/

ListActivity http://limingnihao.iteye.com/

Android開發學習 之 四、Activity

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.