Проблема с получением результата во фрагменте

#java #android #android-fragments #fragment #qr-code

#java #Android #android-фрагменты #фрагмент #qr-код

Вопрос:

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

Как я понял проблема в методе «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();

}
}
  

Комментарии:

1. super.onActivityResult должно располагаться сразу после onActivityResult функции

2. @JohnJoe, почему onActivityResult стоит публиковать таким образом?

3. Куда вы звоните startActivityForResult() ? Если вы хотите использовать результаты действия во фрагменте, вам нужно вызвать его для этого конкретного фрагмента.

4. @DominikG. куда его добавить? В событии «onClick»?

5. Да, просто позвоните startActivityForResult туда и укажите ему параметры, которые вы даете в противном случае, тогда результат должен быть доставлен.

Ответ №1:

Эта замена помогла:

     public void onClick(View view) {
        IntentIntegrator.forFragment(this).initiateScan();
   }