如何区分从 cardview child 的 onclicklistener 传递到 OnActivityResult 的意图

How to differentiate between intent passed from an onclicklistener of a cardview child to OnActivityResult

在阅读了 Whosebug 上的多个页面后,我尝试了很多方法,但我似乎无法让它工作。

我有一个带有 onclicklistener 的 cardview,每个 child 点击(使用 setSingleEvent)。

其中一个 child 使用条形码扫描仪,然后将扫描的条形码传递给另一个 activity(通过 onActivityResult)。

但现在我需要另一个 child (cardview) 来使用相同的条码扫描仪并将值也传递给另一个 activity。我不知道如何区分 onActivityResult 方法中的两次点击。

但是,该代码适用于实现条码扫描器 (finali == 0) 的单个 child 网格。但是,如果 (finali == 3),我该如何传递给 onActivityResult 不同的事情呢?

private void setSingleEvent(GridLayout mainGrid) {
    //Loop all child item of main Grid
    for (int i = 0;i<mainGrid.getChildCount();i++){
        CardView cardView = (CardView) mainGrid.getChildAt(i);

          final int finali=i;
        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (finali == 0){
                    Intent intent = BarcodeReaderActivity.getLaunchIntent(getApplicationContext(), true,false);
                    startActivityForResult(intent, BARCODE_READER_ACTIVITY_REQUEST);

                }
                else if (finali == 1){
                    startActivity(new Intent(getApplicationContext(),AllActiveCheckInActivity.class));
                }
                else if (finali == 2){
                    Log.d(TAG, "onClick: Reports Clicked");

                }
                else if (finali == 3){

                    Intent intent = BarcodeReaderActivity.getLaunchIntent(getApplicationContext(), true,false);
                    startActivityForResult(intent,BARCODE_READER_ACTIVITY_REQUEST);
                }

            }
        });
    }
}

这是我的 onActivityResult,当我只使用一个 child cardview 来实现条码扫描器时,它工作正常。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode != Activity.RESULT_OK) {
        Toast.makeText(this, "error in  scanning", Toast.LENGTH_SHORT).show();
        return;
    }

    if (requestCode == BARCODE_READER_ACTIVITY_REQUEST && data != null) {
            Barcode barcode = data.getParcelableExtra(BarcodeReaderActivity.KEY_CAPTURED_BARCODE);
            String terminal_id = barcode.rawValue;
            Intent intent1 = new Intent(this,LocationDetails.class);
            intent1.putExtra("terminal_id",terminal_id);
            startActivity(intent1);

    }

}

在调用 startActivityForResult 时将不同的常量作为 requestCode 传递,而不是将相同的常量 (BARCODE_READER_ACTIVITY_REQUEST) 传递给每个调用:

if (finali == 0) {
    Intent intent = BarcodeReaderActivity.getLaunchIntent(getApplicationContext(), true,false);
    startActivityForResult(intent, BARCODE_READER_ACTIVITY_REQUEST_FINALI_1);
}
// ... the remaining code of finali == 1 & finali == 2
else if (finali == 3) {
    Intent intent = BarcodeReaderActivity.getLaunchIntent(getApplicationContext(), true,false);
    startActivityForResult(intent,BARCODE_READER_ACTIVITY_REQUEST_FINALI_3);
}

然后查看onActivityResult方法中的requestCode:

if (requestCode == BARCODE_READER_ACTIVITY_REQUEST_FINALI_1 && data != null) {
   // Code for finali == 1
} else if (requestCode == BARCODE_READER_ACTIVITY_REQUEST_FINALI_3 && data != null) {
   // Code for finali == 3
}