onActivityResult Android的requestCode

时间:2016-04-04 09:47:18

标签: android react-native

我在MainActivity.java

中有这段代码
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch(requestCode) {
      case 1:
        mImagePicker.handleActivityResult(requestCode, resultCode, data);
        break;

      case 10:
        mBraintreePackage.handleActivityResult(requestCode, resultCode, data);
        break;
    }
}

基本上这两个包(我使用的是react-native)都使用相同的 包中的requestCode

// ImagePicker
static final int REQUEST_LAUNCH_CAMERA = 1;

// Braintree Android
private static final int PAYMENT_REQUEST = 1;

所以我必须编辑其中一个才能使此switch语句生效。否则两个语句都将被执行。 它是一种建议的方式还是有任何方法可以在不编辑包本身的情况下进行?

2 个答案:

答案 0 :(得分:1)

点击付费按钮时,您可以像isPayClicked一样使用布尔标志,并在案例1的onActivityResult上检查此值:执行与付款相关的代码或与相机相关的代码。

声明:

private boolean isPayClicked;

onClick方法/案例付款按钮:

isPayClicked = true;
//start Payment Intent

<强> onActivityResult:

@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);

switch(requestCode) {
  case 1:
    if(isPayClicked){
      isPayClicked = false;
    //Perform payment related code
    }else{
    mImagePicker.handleActivityResult(requestCode, resultCode, data);
    }
    break;

  case 10:
    mBraintreePackage.handleActivityResult(requestCode, resultCode, data);
    break;
}
}   

答案 1 :(得分:0)

在数据Intent中放置一个值。然后检查那里有哪些数据。这样的事情:

if (data.getIntExtra(WHAT_REQUEST, -1) == 1){
            //do camera stuff
} else {
            //do payment
}

然而,这是一个糟糕的方法。您必须以某种方式覆盖请求代码,因为它是默认指示符。