2012-03-19 9 views
5

Tengo algunos problemas al ejecutar un fragmento si realicé un escaneo de código QR a través de la biblioteca de ZXing 2.0.Lanzamiento de un fragmento después de la exploración de código QR de ZXing 2.0

Tengo esta excepción:

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* 

Cuando ejecuto este código:

@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'am preguntarse por qué sucede esto. ¿No es posible lanzar un Fragment-Transaction al final de ActivityResult?

Gracias por su ayuda con anticipación.

Respuesta

2

Esto ocurre básicamente porque su actividad está en pausa, llamando a onActivityResult después de onSaveInstanceState, de ahí el mensaje: 'No se puede realizar esta acción después de onSaveInstanceState'. Guarde el requestCode, resultCode e intento y marque onResume si tiene algo con lo que trabajar.

7

Es posible llamar al onActivityResult antes del onResume y no puede agregar nuevos fragmentos antes de que la Actividad haya llamado al menos onResume.

Por lo tanto, debe almacenar los datos que obtuvo en onActivityResult, verifique esto en onResume y realice allí los cambios de su Fragmento.

Cuestiones relacionadas