Android Activity間跳轉與傳遞數據

1 概述

Activity之間的跳轉主要使用java

startActivity(Intent intent);
startActivityForResult(Intent intent,int requestCode);

這兩個函數,傳遞數據的話利用Intent進行傳遞,負責數據須要配合Bundle使用.這篇文章講述瞭如何利用這兩個函數在Activity之間的跳轉以及傳遞數據.git

2 Activity間跳轉

2.1 直接跳轉

這裏有兩個Activity:FirstActivity與SecondActivity,從FirstActivity中跳轉到SecondActivity中只須要一個startActivity()便可:github

startActivity(new Intent(this,SecondActivity.class));

通常須要在SecondActivity中加上finish()函數,表示這個Activity結束,好比這裏直接在SecondActivity的按鈕事件裏面加上了finish():
在這裏插入圖片描述
在這裏插入圖片描述數組

2.2 回調

不少狀況下須要在FirstActivity跳轉到SecondActivity後,在SecondActivity進行相應的操做,如更新數據之類,而後返回FirstActivity,通知FirstActivity執行某些操做,這時候就須要使用startActivityForResult().
startActivityForResult有兩個參數,一個是Intent,表示將要跳轉的Activity,一個是requestCode(int類型),表示請求碼,用於調用Activity的onActivityResult()函數.
如FirstActivity中:函數

startActivityForResult(new Intent(this,SecondActivity.class),11);

這裏11就是請求碼,而後在SecondActivity中,使用setResult()函數:測試

setResult(22,new Intent().putExtra("str","from second activity"));

setResult()接受兩個參數,第一個參數表示resultCode,從這個SecondActivity返回的結果碼,另外一個Intent,表示要返回給FirstActivity的數據.
最後在FirstActivity中重載onActivityResult():
在這裏插入圖片描述
onActivityResult中判斷請求碼與結果碼後進行相應操做.
在這裏插入圖片描述this

3 Activity間傳遞數據

3.1 傳遞普通數據

傳遞普通類型的數據直接使用Intent的putExtra()便可,putExtra接受兩個參數,第一個是一個String,表示鍵,第二個是值,類型能夠是byte,char,short,long等基本類型與這些基本類型組成的數組,固然String也能夠.
在這裏插入圖片描述
好比在FirstActivity中,傳遞數據給SecondActivity:
在這裏插入圖片描述
而後在SecondActivity中使用getIntent()獲取Intent後,再從裏面獲取數據:
在這裏插入圖片描述
若是想從SecondActivity中返回數據給FirstActivity,也就是從被調用的Activity中返回數據,可使用前面介紹過的setResult()方法.
其中第二個參數是一個用於存儲數據的Intent,把數據put進去便可.
在這裏插入圖片描述
最後記得在onActivityResult作相應的判斷處理:
在這裏插入圖片描述
在這裏插入圖片描述spa

3.2 傳遞一組數據

當數據的種類變多時,好比混合了int,String,byte,char等,能夠對逐個類型使用putExtra(),但更好的方法是使用Bundle.
Bundle的使用與Intent相似,也是對於不一樣的類型採用鍵值對的添加方法,直接putXXX:
在這裏插入圖片描述
數據添加完畢以後,在intent中使用putExtras(bundle):
在這裏插入圖片描述
而後就能夠在SecondActivity中接收數據了.
首先須要使用getIntent().getExtras()獲取Bundle,再獲取裏面的數據.
在這裏插入圖片描述
注意一下獲取到的Bundle有可能爲null,取數據前須要判斷一下.
在這裏插入圖片描述3d

3.3 傳遞對象

若是想要傳遞的數據是一個對象怎麼辦?難道對每個屬性都使用getter再放進去嗎?
並非,Bundle提供了一個處理序列化對象的方法:
在這裏插入圖片描述
只要對象實現了Serializable,就能夠被Bundle處理,好比這裏有一個測試類Student:
在這裏插入圖片描述
而後在FirstActivity中直接new一個,並使用Bundle的putSerializable便可.
在這裏插入圖片描述
接着再SecondActivity中經過Intent取出Bundle後,使用其中的getSerializable()取出對象,最後使用強制類型轉換:
在這裏插入圖片描述
在這裏插入圖片描述code

4 源碼

github
碼雲

相關文章
相關標籤/搜索