startActivityForResult方法是android中活動啟動的一種方法,這個方法接收兩個參數,第一個是Intent ,另一個是請求碼,請求碼只要是唯一值就可以。
這個方法可以在活動銷毀之后,返回一個結果給上一個活動。
例如:活動A打開了活動B,那么在活動B銷毀之后,可以返回一個結果給活動A。
這時候就要在活動A中,使用startActivityForResult方法打開活動B
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent("com.example.activitytest.ACTTON_START"); startActivityForResult(intent,1);//打開活動B } });
在活動B中用 setResult 方法設置好要返回的結果,setResult()接收兩個參數,第一個是活動返回處理結果,一般只是用RESULT_OK和RESULT_CANCELED,另一個這是將帶有數據的Intent傳遞回去。
button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.putExtra("data_return","測試一下");//要返回的結果 setResult(RESULT_OK,intent); finish();//銷毀活動B } });
在活動B被銷毀后 ,會回調上一個活動(即活動A)的onActivityResult()方法(想要在活動A中獲取傳遞的結果,就需要覆寫該方法)。
@Override // 請求碼 處理結果 帶返回數據的Intent protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { switch (requestCode){ case 1 : if(resultCode == RESULT_OK){ String returnData = data.getStringExtra("data_return"); Log.d("MainActivity",returnData); } break; default: } }
這樣在活動B被銷毀后,就會回到活動A,獲取到活動B返回的數據了。但在用戶如果在活動B並沒有點擊定義的按鈕button2,而是按下Back按鍵,這時候還需要覆寫活動B的 onBackPressed()方法。
@Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data_return","測試一下"); setResult(RESULT_OK,intent); finish(); } });