1. 程式人生 > >Android Activity之間的資料傳遞

Android Activity之間的資料傳遞

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,則不必判斷。

 

資料回傳很常用,比如發微信朋友圈時,進入相簿選擇好圖片後,會回傳選擇的圖片的資