Не удается получить доступ к onActivityResult zxing для фрагмента - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь прочитать штрих-код через Zxing во фрагменте

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_caddie, container, false);
    etCodigo = v.findViewById(R.id.etCodigo);
    btnLeerCodigo = v.findViewById(R.id.btnLeerCodigo);

    btnLeerCodigo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            escanear();
        }
    });
    text = "";

    return v;
}


public void escanear() {

    IntentIntegrator intent = IntentIntegrator.forSupportFragment(FragmentCaddie.this);
    //IntentIntegrator intent = new IntentIntegrator(getActivity());
    intent.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
    intent.setPrompt("ESCANEAR CODIGO");
    intent.setCameraId(0);
    intent.setBeepEnabled(false);
    intent.setBarcodeImageEnabled(false);
    intent.initiateScan();

}


 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);

    if(result != null) {
        if(result.getContents() == null) {
            Toast.makeText(getContext(), "Cancelaste el escaneo", Toast.LENGTH_SHORT).show();
        } else {
            text = text + " + " +  result.getContents().toString() ;
            etCodigo.setText(text);
            escanear();
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Проблема в том, что он не обращается к onActivityResult

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Решение было очень простым: onActivityResult, который я реализовал, был переопределен из родительского действия

Решение состоит в том, чтобы вызвать фрагмент onActivityResult из родительского действия

private static final int BARECODE_REQUEST = 114910;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {     

    if (requestCode == BARECODE_REQUEST) {
        super.onActivityResult(requestCode,resultCode,data);
    }
}
1 голос
/ 26 марта 2020

Хостинговая активность переопределяет onActivityResult(), но она не позвонила на super.onActivityResult() для необработанных кодов результата. Очевидно, что хотя фрагмент и выполняет вызов startActivityForResult(), действие получает первый шанс при обработке результата. Это имеет смысл, если учесть модульность фрагментов. Как только я реализовал super.onActivityResult() для всех необработанных результатов, фрагмент получил возможность обработать результат.

Проверьте это:

onActivityResult не вызывается во фрагменте

Я надеюсь быть полезным для вас:)

...