天天看點

Activity基礎全面詳解

1 建立Activity 1 建立class類,繼承Activity方法 2 重寫onCreate方法 3 設定setContent(R.layout.xxx.xml);設定顯示内容 4 layout檔案夾下面建立對應的xml檔案。 5 在Manifest中注冊Activity <activity android:name=".MainActivity" android:label="@string/app_name" > </activity> 若Activity就在Manifest所設定的唯一辨別Package中,則隻用 .類名就可以,否則要寫完整包名.類名。且在.java檔案中設定setContent時,要将R檔案所在的包名導入。 注:也可直接建立Activity檔案,比上述友善很多。

Activity基礎全面詳解
Activity基礎全面詳解

2 頁面跳轉 顯示方式: 1 建立Intent對象: Intent intent=new Intent(context,XXX.class); 2用context.startActivity( )開啟intent意圖 startActivity(intent); 隐式方式:并不指定跳轉Activity,而是讓系統根據action進行過濾而選擇啟動Activity 1 空參構造intent: Intent intent=new Intent(); 2 設定action作為過濾标志: intent.setAction("清單檔案中對應Aactivity的action name"); //intent. 3 開啟意圖 startActivity(intent); 注: 使用隐式跳轉,一定要在清單檔案中配置相應Activity的<action/>和<category/>标簽,兩個都要寫。例: <intent-filter> <action android:name="activity_demo" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 3 資訊傳遞 3.1沒有傳回值 建立intent對象之後 使用intent.putExtra("keyname","msgvalue");添加想要發送的資訊,可以添加多個。

接收方使用getIntent( )方法擷取開啟此Activity的Intent: Intent intent=getIntent(); 使用 intent.getXXXExtra("keyname");擷取所發送過來的值: String str=intent.getStringExtra("keyname"); 3.2有傳回值 發送方: Intent intent = new Intent(this, Activity_receiver.class); intent.putExtra("msg", "aanbsbdbds"); 開始方法變為: startActivityForResult(intent,request_code); 還要重寫onActivityResult( )方法,用來接收傳回值。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Intent intent=data;//傳回的intent。 String msg=intent.getStringExtra("rep");//擷取傳回的資料。 Toast.makeText( this, "requestCode: " + requestCode + "resultCode: " + resultCode + "data: " + msg, 500).show(); } 接收方: Intent reint=getIntent(); reint.putExtra("key","vaule");//設定想要傳回的資訊 setResult(reponse_code,reint);//設定傳回碼,并将帶有傳回資訊I的ntent傳回 finish( )

4 生命周期 create (restart) start resume pause stop destory 4.1 單個Activity

Activity基礎全面詳解
Activity基礎全面詳解

4.2 Activity之間跳轉 4.1.1覆寫原頁面(A跳轉B,B覆寫A) A pasue B create B start B resume A stop B按傳回鍵或跳轉按鈕(其實都是會finnis()B) B pause A restart A start A resume B stop B destory 4.1.2跳轉視窗樣式(A跳轉B,B以視窗樣式彈出,A不會從螢幕消失) android:theme="@android:style/Theme.Dialog"; 對話框的樣式設定 A pause B create B start B resume B按傳回鍵 B pause A resume B stop B destory 5 savedinstanceState 現場保護 Activity中有一個onSaveInstanceState(Bundle outState)方法,當發生: 1設定更改; 2異常停止 時會調用該方法,并産生一個Bundle對象,将Aactivity目前狀态儲存下來。我們可以利用 outState.putInt("key_name",vaule);将我們想要儲存的資訊儲存到bundle對象中。 然後在onCreate(Bundle savedInstanceState)中,用getInt("key_name");方法取出來。 例 設定更改(看電影由豎屏改為橫屏,則會觸發該事件) 在Activity第一次被建立時,調用onCreate方法,savedInstanceState=null,因為沒有條件觸發onSaveInstanceState(Bundle outState)方法。而設定改變以後,Activity也會被重建,再次執行onCreate方法時,Bundle對象就不為null了,此時就可以将我們儲存在Bundle對象中儲存的資料取出來。

6 Activity啟動方式 android:launchMode="model_name";設定Aactivity的啟動方式 1 standard 标準的,預設的 方式 每次跳轉Activity都會建立一個,并壓到棧中,先入後出,傳回時一層層傳回,直到最先壓入的Activity. 2 singleTask 當跳轉到某一個Activity時,會先判斷棧裡面是否已存在,若存在則将其前面的Activity全部出棧,讓其處于棧頂;若棧中沒有,則建立一個。 3 singleTop 跳轉一個Activity時會判斷棧頂是否就是所要跳轉的Activity,若是則不建立新的;若不是則建立新的Activity。 4 singleInstance 被設定該模式的Activity會單獨占一個棧, 且僅有一個。 例如:A->B->C->D->B,(B為singleInstance模式) 從B開始傳回時,B->D,D->C,C->A; 原因是B和A C D不在同一個棧中,B在一個單獨的棧,A C D在一個另一個棧中。