0

I know I this question maybe asked before still I wanted to put my question up for all ,I need to make a scanner feature in my application , I am using a botton navigation in my project and due to that i am making more than one fragments on the same activity . Now in that fragment I need to call an ImageButton on the click of which camera activity has to open and after clicking the picture(or scanning lets suppose a QR code) it should go to the same fragment and return the scanned value. It worked in case of new activity but not working in fragment.

this is what I am doing

 public class HomeFragment extends Fragment implements View.OnClickListener {

 ImageButton btnScanner;
private TextView textViewName, textViewAddress;
//qr code scanner object
private IntentIntegrator qrScan;

  public HomeFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View root = inflater.inflate(R.layout.fragment_home, container, false);

    textViewName=(TextView)root.findViewById(R.id.textViewName);
    textViewAddress=(TextView)root.findViewById(R.id.textViewAddress);

    btnScanner=(ImageButton)root.findViewById(R.id.scannerBtn);
    btnScanner.setOnClickListener(this);

    qrScan = new IntentIntegrator(getActivity());
    return  root;
}

private void initViews(){

}

//Getting the scan results
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if (result != null) {
        //if qrcode has nothing in it
        if (result.getContents() == null) {
            Toast.makeText(getContext(), "Result Not Found", Toast.LENGTH_LONG).show();
        } else {
            //if qr contains data
            try {
                //converting the data to json
                JSONObject obj = new JSONObject(result.getContents());
                //setting values to textviews
                textViewName.setText(obj.getString("name"));
                textViewAddress.setText(obj.getString("address"));
            } catch ( JSONException e) {
                e.printStackTrace();
                //if control comes here
                //that means the encoded format not matches
                //in this case you can display whatever data is available on the qrcode
                //to a toast
                Toast.makeText(getContext(), result.getContents(), Toast.LENGTH_LONG).show();
            }
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}


@Override
public void onClick(View view) {
    qrScan.initiateScan();
}

}

Here I am using the instance of a library class intentIntegrator. I have also vited to https://stackoverflow.com/questions/44622311/how-can-i-call-onactivityresult-inside-fragment-and-how-it-work/44622487#:~:text=if%20you%20call%20startActivityForResult(),deliver%20result%20to%20desired%20fragment.%20%7D&text=super.,-onActivityResult%20()%20will and

onActivityResult is not being called in Fragment yet my problem is not resolved

  • in the attached library there is a method initiatscan() which actually runs startActivityforResult() at the background. – Paritosh purohit Aug 05 '20 at 12:10
  • check this https://stackoverflow.com/questions/20013213/zxing-onactivityresult-not-called-in-fragment-only-in-activity – aryanknp Aug 05 '20 at 12:23

0 Answers0