一個andrid應用程序,肯定會涉及到activity之間的跳轉,在跳轉的時候進行數據傳遞,這是最基本的要求。
那么如何進行activity的跳轉和數據傳遞呢,接下來我說一下我的學習心得體會
activity之間的跳轉主要是intent來連接的,如何實現呢,先來看一個簡單的例子:
想要A跳轉到B,可以這樣實現:
Intent intent=new Intent();
intent.setClass(A.this,B.class);
startActivity(intent);
或者:startActivity(new Intent(A.this,B.class));
當然,A和B都要繼承在Activity。
? ? ?可能寫到這,對于許多初學者來說,已經知道了如何進行頁面跳轉了,但是,曾經是小白的我在網上看這類文章,我會有這樣的疑問:Intent是個什么東西?于是乎就又要在浩瀚的網絡海洋中查找關于Intent的相關知識,所以,在這里我覺得有必要說一下Intent了。
? ? ?Intent:翻譯過來是"意圖",作用是用來激活組件和傳遞數據。Intent的目的是本著"高內聚,低耦合"的原理,來進行組件之間的解耦的,耦合性當然指的是組件與組件之間的聯系,越不緊 密,越好,便于代碼的維護,那么提到意圖,就不得不說Intent的分類了,intent總共分為兩類:
顯示意圖:
? ? ?原理:直接指定類的字節碼文件,來開啟目標Activity
? ? ?優點:效率高,代碼書寫簡單
? ? ?缺點:只能開啟自己應用程序中的activity,不能開啟其他應用程序中的activity,比如,你可以在你的應用程序中從a跳到b,但是如果有一個需求,讓你打開系統的聯系人界面,他就無能為力了。
? ? ?編寫步驟:
? ? ? ? ? ? ?1.創建意圖對象,指定類的字節碼文件
? ? ? ? ? ? ? ? ? ? ? ?Intent ?intent=new ?Intent(this,OtherActivity.class);
? ? ? ? ? ? ?2.開啟目標acytivity
? ? ? ? ? ? ? ? ? ? ? startActivity(intent);
隱式意圖:
? ? ?原理:開啟目標activity,需要去清單文件中匹配動作,如果匹配成功,就開啟activity,如果匹配失敗,就會報classnotfoundexception這個異常,應用程序會崩潰。
? ? 優點:可以開啟自己應用程序和其他應用程序的activity
? ? 缺點:代碼書寫復雜,效率低
Intent介紹完了,最基本的開啟Activity的方法也說了,下面就來說一下Activity之間的數據傳遞
Activity之間傳遞數據,通過Intent來傳遞,那么他可以傳遞什么數值呢?請耐心看下面的:
? ?1. java :八大基本類型及其數組
? ?2. bundle :數據捆
? ?3. Serializable :序列化
? ?4. Parcelable :序列化到公共內存
? ?5. Intent :意圖類型
不可以傳遞Object哦!!!
好了,Intent可以在activity中進行數據傳遞,具體是怎么做到的呢,在這就不得不說另外一種跳轉方式了:startActivityForResult(Intent intent,int requestCode);他是這樣做到的:
1. 特殊的方式開啟activity
startActivityForResult(intent, 1);
2. 設置返回的數據
Intent intent = new Intent();
intent.putExtra("num", phoneNum);
3. 設置返回的數據
setResult(10, intent);
//關閉當前頁面
finish();
4. 獲取activity返回的數據
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String phoneNum = data.getStringExtra("num");
etContacts.setText(phoneNum);
}
這樣就可以完成數據的傳遞了。當然除了這個方法,在普通的頁面跳轉中也是可以傳遞數據的:
Activity:A
Intent intent =new Intent();
intent.putExtra("name", userName);
intent.setClass(A.this,B.class);
startActivity(intent);
Activity:B
Intent intent =getIntent();
String name = intent.getStringExtra("name");
這樣就完成了A和B之間的數據傳遞了。