Running a fragment after scanning a ZXing 2.0 QR code

I had problems starting the fragment if I scanned the QR code through the ZXing 2.0 library.

I got this exception:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=com.google.zxing.client.android.SCAN flg=0x80000 (has extras) }} to activity {fraiss.yucrowd/fraiss.yucrowd.activities.ScanQrCode}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState*

When I execute this code:

@Override
    public void onCreate(Bundle bundle) {
        // TODO Auto-generated method stub
        super.onCreate(bundle);
        setContentView(R.layout.scan_qr_code);

        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    }

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 0)
        {
            if (resultCode == RESULT_OK)
            {
                String contents = intent.getStringExtra("SCAN_RESULT");
                String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
                // Handle successful scan
                Log.d("MENU", "Scan result: " + contents + " as " + format);

                // Load details for qr code
                    FragmentTransaction fragmentTransaction = getSupportFragmentManager()
                            .beginTransaction();

                    Fragment fragmentDetails = new FragmentDetails(
                            contents);

                    fragmentTransaction
                            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                    fragmentTransaction.replace(R.id.fragment_main,
                            fragmentDetails);
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();  
            }
            else if (resultCode == RESULT_CANCELED)
            {
                // Handle cancel
                Log.d("MENU", "Scan canceled");
            }
        }
    }

I wonder why this is happening. Can't start a Fragment-Transaction at the end of an ActivityResult?

Thanks for your help in advance.

+5
source share
2 answers

It is possible that onActivityResultis called before onResume, and you cannot add new fragments before the activity at least calls onResume.

Therefore, you need to save the data that you received in onActivityResult, check it in onResumeand make fragment changes there.

+7

, , onActivityResult onSaveInstanceState, : " onSaveInstanceState". , resultCode onResume, .

+2

All Articles