四大組件之activity(二):activity跳轉和數據傳遞

一個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之間的數據傳遞了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 【 Android四大組件之一 主要用于與用戶進行交互,在一個App中可能存在零個或多個Activity 】 1....
    征程_Journey閱讀 1,978評論 0 4
  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,554評論 0 17
  • 關于為什么要寫屬于自己的博客,我在前一篇文章中也提到了。主要是歸納自己這一個時期所學到的知識,幫助自己更好的理解,...
    Kevin_Jern閱讀 929評論 0 8
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,558評論 25 708
  • Sass筆記 變量 Sass可以讓CSS也像程序語言一樣擁有變量,可以把反復使用的CSS屬性定義為變量,然后通過變...
    舟_破浪閱讀 247評論 0 0