Не получается вызвать onActivityResult во фрагменте

148
17 января 2020, 09:50

я пытаюсь получить результат сканирования QR-кода во фрагменте, при использовании activity все работает, но после передачи, результат получить не получается. Как это можно исправить?

Как я понял проблема в методе "onActivityResult". Так как результат передается активити, а не фрагменту.

Мой код находится ниже:

   public class Fragment_qr extends Fragment implements View.OnClickListener {
private Button btnScanQRCode;
private TextView txtFruit, txtSize, txtColor;
//QR Code Scanner Object
private IntentIntegrator qrScan;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    return inflater.inflate(R.layout.qr_code_scan_layout, null);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    DisplayMetrics metrics = this.getResources().getDisplayMetrics();
    btnScanQRCode = (Button) view.findViewById(R.id.btnScanQRCode);
    txtFruit = (TextView) view.findViewById(R.id.txtFruitName);
    txtSize = (TextView) view.findViewById(R.id.txtFruitSize);
    txtColor = (TextView) view.findViewById(R.id.txtFruitColor);
    //Initialize the Scan Object
    qrScan = new IntentIntegrator(getActivity());
    //OnClickListener Attached to the Button
    btnScanQRCode.setOnClickListener(this);
}
//Getting the scan results
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if (result != null) {
        //Check to see if QR Code has nothing in it
        if (result.getContents() == null) {
            Toast.makeText(getActivity(), "Result Not Found", Toast.LENGTH_LONG).show();
        } else {
            //QR Code contains some data
            try {
                //Convert the QR Code Data to JSON
                JSONObject obj = new JSONObject(result.getContents());
                //Set up the TextView Values using the data from JSON
                txtFruit.setText(obj.getString("fruit"));
                txtSize.setText(obj.getString("size"));
                txtColor.setText(obj.getString("color"));
            } catch (JSONException e) {
                e.printStackTrace();
                //In case of exception, display whatever data is available on the QR Code
                //This can be caused due to the format MisMatch of the JSON
                Toast.makeText(getActivity(), result.getContents(), Toast.LENGTH_LONG).show();
                txtSize.setText(result.getContents());
                System.out.println("code QR: " + result.getContents());
            }
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}
@Override
public void onClick(View view) {
    //initiating the qr code scan
    qrScan.initiateScan();
}
}
Answer 1

Помогла такая замена:

    public void onClick(View view) {
        IntentIntegrator.forFragment(this).initiateScan();
   }
READ ALSO
Javafx - открыть новую вкладку в одном окне

Javafx - открыть новую вкладку в одном окне

Не могу понять, как при нажатии на кнопку открыть как бы новый Pane с другими кнопками, не окно а именно Pane в том же окне, как, например, в антивирусе...

156
Перечисления и конструктор

Перечисления и конструктор

В enum Apple определен конструтор и не пойму почему мы пишем сразу перечислениям данные в конструктор именно в ENUM, а не в другом месте при создании...

125
Какая технология лучшая для real-time messaging?

Какая технология лучшая для real-time messaging?

Пытаюсь написать программу клиент сервер которая будет оповещать клиентов о каких то событиях (например о новых сообщениях) между друг другомВ...

133
MVP Pattern Android для больших приложений

MVP Pattern Android для больших приложений

Пробую постигать MVP Pattern для Android приложенийСама суть, вроде, ясна, но для совсем небольших приложений, которые обычно и бывают в примерах

155