簡體   English   中英

Android:OnActivityResult行為

[英]Android: OnActivityResult behavior

我在應用程序中使用startActivityForResult 但是我對其行為有疑問/疑問。

場景:在我的應用程序中。 我有兩個活動,例如Activity1和Activity2。 我使用不同的請求代碼從我的Activity1到Activity2兩次調用了startActivityForResult

final REQUEST_CODE_1 = 1;
final REQUEST_CODE_2 = 2;

Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, REQUEST_CODE_1);

Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, REQUEST_CODE_2);

我在onActivityResult得到了數據

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (data != null) {
        switch (requestCode) {
            case REQUEST_CODE_1:
                //some piece of code
                break;
            case REQUEST_CODE_2:
                //some piece of code
                break;
        }
    }

}

在我的Activity2中,我有一些條件,基於該條件它將數據發送回Activity1。

myStr = scanner.getValue();
if(myStr.startsWith("5901")){
     intent.putExtra("box",myStr);
     setResult(REQUEST_CODE_1,intent);
  }else{
      intent.putExtra("item",myStr+"dCbA");
      setResult(REQUEST_CODE_2,intent);
}

其中mystr是一個String變量。

問題:我從Activity1執行第一個代碼,即使用REQUEST_CODE_1 ,在Activity2中,執行else塊。 在這種情況下,我希望REQUEST_CODE_2返回到“活動”,但我將REQUEST_CODE_1返回到“活動”。 顯然, else塊的setResult沒有按預期執行。

希望我的問題清楚。 有人可以解釋一下。

謝謝。

setResult(int)必須始終提供結果代碼,該代碼可以是標准結果RESULT_CANCELED,RESULT_OK。 您正在提供請求代碼,而不是RESULT_OK或RESULT_CANCELED。

嘗試這個

Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, REQUEST_CODE_1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (data != null) {
        switch (requestCode) {
            case REQUEST_CODE_1:
                //check if resultCode is RESULT_OK or CANCELED
                break;
            case REQUEST_CODE_2:
                //some piece of code
                break;
        }
    }

}


if(myStr.startsWith("5901")){
     setResult(RESULT_OK,intent);
  }else{
      setResult(RESLT_CANCELED,intent);
}

從我的角度看,您假設myStr是從Activity1發送的request_code。

request_code不是參數的一部分,因此您需要將其添加到Intent中。

Intent i = new Intent(this, Activity2.class);
i.putExtra("request_code", REQUEST_CODE_1);
startActivityForResult(i, REQUEST_CODE_1);

因此,您可以使用getArguments()。getIntegerExtra(“ request_code”)從Activity2獲取它

在這種情況下,您需要將對象與另一個不帶等號(或包裝)的文字進行比較

同樣,Activity2不需要知道setResult的整數,因為它必須是RESULT_OK,RESULT_CANCELED和RESULT_NONE之一。 onActivityResult將返回(requestCode,resultCode,data),其中requestCode將是您剛完成startActivityForResult的整數,而resultCode將是Activity2中在完成之前設置的那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM