1、向目標Activity【Main2Activity】傳遞資料:
Intent intent=new Intent(this,Main2Activity.class);
//可傳遞多種型別的資料
intent.putExtra("name","張三");
intent.putExtra("age",12);
startActivity(intent);
2、在目標Activity【Main2Activity】中取出資料
Intent intent=getIntent();
//用getXxxExtra()取出對應型別的資料,取出String只需要指定key
String name=intent.getStringExtra("name");
//取出int要指定key,還要設定默認值,當intent中沒有該key對應的value時,回傳設定的默認值
int age=intent.getIntExtra("age",0);
在目標Activity【Main2Acitivity】銷毀時,想讓它可以回傳資料給上一個Activity,這樣需要改寫前面的代碼:
1、設定一個請求碼標識當前Activity,讓它跳轉到目標Activity【Main2Activity】,
Intent intent=new Intent(this,Main2Activity.class);
//startActivityForResult()方法可以啟動一個Activity,并可以設定一個int型的請求碼標識當前Activity
startActivityForResult(intent,1);
2、在目標Activity【Main2Activity】中回傳資料
//回傳資料用得Intent可以新建,也可以用getIntent()
Intent intent=new Intent();
//設定要回傳的資料
intent.putExtra("name","張三");
intent.putExtra("age",18);
//設定結果碼標識當前Activity,回傳資料,不管多早呼叫這句代碼,這句代碼在當前Activity銷毀時才會執行,即此Activity銷毀時才會回傳資料,請求碼和結果碼不必相同,
setResult(1,intent);
回傳時會把請求碼、結果碼、Intent資料封裝為一個整體回傳,請求碼+結果碼唯一標識回傳的Intent
3、在上一級Activity中取出回傳的資料
上一級Activity使用 startActivityForResult() 開啟目標Activity后,當目標Activity銷毀時,會向上一級Activity回傳資料,并回呼上一級 Activity的 onActivityResult() 方法,
我們需要重寫上一級Activity的 onActivityResult() 方法獲取回傳資料,
//重寫上一級Activity的onActivityResult()方法來獲取目標Activity回傳的資料
//三個形參,請求碼、結果碼、目標Activity回傳的Intent
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
//呼叫基類的方法,此句代碼會自動生成
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1){ //如果請求碼是當前Activity的
if(resultCode==1){ //如果結果碼是某個目標Activity的,就取出對應的資料,這個判斷主要是可能有多個目標Activity向當前Activity回傳資料,這些Intent資料中可能具有相同的key
String name=data.getStringExtra("name");
int age=data.getIntExtra("age",0);
}
}
}
如過上一級Activity開啟了多個目標Activity,回傳資料時都是回呼onActivityResult()方法,所以常常要根據結果碼區分是哪個目標Activity回傳的資料,如果只開啟了一個目標Activity,則不必判斷,
資料回傳很常用,比如發微信朋友圈時,進入相冊選擇好圖片后,會回傳選擇的圖片的資訊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231845.html
標籤:其他
