1、向目標Activity傳遞數據: 2、在目標Activity中取出數據 目標Activity銷毀時,可以回傳數據給上一個Activity: 1、啟動目標Activity,並設置一個請求碼標識當前Activity 2、在目標Activity中回傳數據 回傳時會把請求碼、結果碼、Intent數據封裝 ...
1、向目標Activity傳遞數據:
1 Intent intent=new Intent(this,Main2Activity.class); 2 //可傳遞多種類型的數據 3 intent.putExtra("name","張三"); 4 intent.putExtra("age",12); 5 startActivity(intent);
2、在目標Activity中取出數據
1 Intent intent=getIntent(); 2 //用getXxxExtra()取出對應類型的數據。取出String只需要指定key 3 String name=intent.getStringExtra("name"); 4 //取出int要指定key,還要設置預設值,當intent中沒有該key對應的value時,返回設置的預設值 5 int age=intent.getIntExtra("age",0);
目標Activity銷毀時,可以回傳數據給上一個Activity:
1、啟動目標Activity,並設置一個請求碼標識當前Activity
1 Intent intent=new Intent(this,Main2Activity.class); 2 //startActivityForResult()方法可以啟動一個Activity,並可以設置一個int型的請求碼標識當前Activity 3 startActivityForResult(intent,1);
2、在目標Activity中回傳數據
1 //回傳數據用得Intent可以新建,也可以用getIntent() 2 Intent intent=new Intent(); 3 //設置要回傳的數據 4 intent.putExtra("name","張三"); 5 intent.putExtra("age",18); 6 //設置結果碼標識當前Activity,回傳數據。不管多早調用這句代碼,這句代碼在當前Activity銷毀時才會執行,即此Activity銷毀時才會回傳數據。請求碼和結果碼不必相同。 7 setResult(1,intent);
回傳時會把請求碼、結果碼、Intent數據封裝為一個整體回傳,請求碼+結果碼唯一標識回傳的Intent
3、在上一級Activity中取出回傳的數據
上一級Activity使用 startActivityForResult() 開啟目標Activity後,當目標Activity銷毀時,會向上一級Activity回傳數據,並回調上一級 Activity的 onActivityResult() 方法。
我們需要重寫上一級Activity的 onActivityResult() 方法獲取回傳數據。
1 //重寫上一級Activity的onActivityResult()方法來獲取目標Activity回傳的數據 2 //三個形參,請求碼、結果碼、目標Activity回傳的Intent 3 @Override 4 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 5 //調用基類的方法,此句代碼會自動生成 6 super.onActivityResult(requestCode, resultCode, data); 7 if(requestCode==1){ //如果請求碼是當前Activity的 8 if(resultCode==1){ //如果結果碼是某個目標Activity的,就取出對應的數據。這個判斷主要是可能有多個目標Activity向當前Activity回傳數據,這些Intent數據中可能具有相同的key 9 String name=data.getStringExtra("name"); 10 int age=data.getIntExtra("age",0); 11 } 12 } 13 }
如過上一級Activity開啟了多個目標Activity,回傳數據時都是回調onActivityResult()方法,所以常常要根據結果碼區分是哪個目標Activity回傳的數據。如果只開啟了一個目標Activity,則不必判斷。
數據回傳很常用,比如發微信朋友圈時,進入相冊選擇好圖片後,會回傳選擇的圖片的信息。