Как провести различие между намерением, переданным от onclicklistener дочернего элемента cardview к OnActivityResult - PullRequest
1 голос
/ 21 февраля 2020

Я перепробовал много подходов после прочтения нескольких страниц в стеке, но я не могу заставить его работать.

У меня есть просмотр карты с onclicklistener для каждого дочернего клика (используя setSingleEvent).

Один из детей использует сканер штрих-кода, затем передает отсканированный штрих-код другому виду деятельности (через onActivityResult).

Но теперь мне нужен другой ребенок (просмотр карты), чтобы использовать тот же сканер штрих-кода и передать ценность для другой деятельности, а также. Я не знаю, как различать оба щелчка в методе 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);

    }

}

1 Ответ

2 голосов
/ 21 февраля 2020

Передача другой константы в качестве requestCode при вызове startActivityForResult вместо передачи одной и той же (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);
}

И затем проверка requestCode в методе onActivityResult:

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
}
...