[英]android:noHistory=“true” behavior but still catch 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.