Android中Activity之間轉遞數據

向目標Activity轉遞數據

  1. 向目標Activity傳遞數據
Intent intent=new Intent(this,Main2Activity.class);
//可傳遞多種類型的數據
intent.putExtra("name","張三");
intent.putExtra("age",12);
startActivity(intent);
  1. 在目標Activity中取出數據
Intent intent=getIntent();
//用getXxxExtra()取出對應類型的數據。取出String只需要指定key
String name=intent.getStringExtra("name");
//取出int要指定key,還要設置默認值,當intent中沒有該key對應的value時,返回設置的默認值
int age=intent.getIntExtra("age",0);

目標Activity銷燬時,可以回傳數據給上一個Activity:

  1. 啓動目標Activity,並設置一個請求碼標識當前Activity
Intent intent=new Intent(this,GoalActivity.class);
//startActivityForResult()方法可以啓動一個Activity,並可以設置一個int型的請求碼標識當Activity
startActivityForResult(intent,1);
  1. 在目標Activity中回傳數據
//回傳數據用得Intent可以新建,也可以用getIntent()
Intent intent=new Intent();
//設置要回傳的數據
intent.putExtra("name","張三");
intent.putExtra("age",18);
//設置結果碼標識當前Activity,回傳數據。不管多早調用這句代碼,這句代碼在當前Activity銷燬時纔會執行,即此Activity銷燬時纔會回傳數據。請求碼和結果碼不必相同。
setResult(1,intent);

回傳時會把請求碼、結果碼、Intent數據封裝爲一個整體回傳,請求碼+結果碼唯一標識回傳的Intent

  1. 在上一級Activity中取出回傳的數據
    上一級Activity使用startActivityForResult()開啓目標Activity後,當目標Activity銷燬時,會向上一級Activity回傳數據,並回調上一級ActivityonActivityResult()方法。
    我們需要重寫上一級ActivityonActivityResult()方法獲取回傳數據。
//重寫上一級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,則不必判斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章