如何区分从Cardview子对象的onclicklistener传递给OnActivityResult的意图

问题描述 投票:0回答:1

在阅读关于stackoverflow的多个页面之后,我尝试了许多方法,但似乎无法使其正常工作。

我有一个带有onclicklistener的卡片视图,可用于每个被点击的孩子(使用setSingleEvent)。其中一个孩子使用条形码扫描仪,然后将扫描的条形码传递给另一个活动(通过onActivityResult)。但是现在我需要另一个孩子(cardview)来使用相同的条形码扫描仪,并将值也传递给另一个(不同的)活动。但是,这是android的新手,也不知道如何在onActivityResult方法中区分两次单击。该代码对于实现条形码扫描器的单个子网格效果很好(如果finali == 0)。但是,如果(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,当我仅使用子卡视图之一来实现条形码扫描器时,效果很好。

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);

        }

    }
java android android-cardview onactivityresult
1个回答
1
投票

[在调用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
}
© www.soinside.com 2019 - 2024. All rights reserved.