2012-02-20 11 views
5

Escenario:¿La tercera actividad llamada devuelve su resultado a la primera actividad en lugar de enviar el resultado a la segunda actividad?

  1. Primera actividad empieza la actividad segundos con startActivityForResult
  2. Segunda actividad empieza tercera actividad con startActivityForResult

Resultado esperado: tercer (último) la actividad establece un resultado que se ve atrapado en el segundo activity's onivityResult

Resultado actual: tercer (último) la actividad fija un resultado que está atrapado en onActivityResult de la actividad primera

¿Cómo se establecen resultado en la tercera actividad que podrá capturarse en tercer lugar de la segunda actividad (última) la actividad establece un resultado que está atrapado en la actividad de la segunda actividad en ActivityResult?

Algunos fragmentos de código:

Primera actividad

public class TestProjActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.main); 

    Log.i("TAAAG", "1st activity - startActivityForResult"); 
    Intent intent = new Intent(TestProjActivity.this, Activ2.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 
    startActivityForResult(intent, 1008); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.i("TAAAG", "1st activity - onActivityResult"); 
    if (resultCode == RESULT_OK) { 
     Log.i("TAAAG", String.valueOf(requestCode)); 
     switch (requestCode) { 
     case 1008: 
      String info = data.getExtras().getString("KEY1"); 
      Log.i("TAAAG", "1st activity - onActivityResult - printing result"); 
      Log.i("TAAAG", info); 
      break; 
     } 
    } 
} 

}

Segunda actividad

public class Activ2 extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Log.i("TAAAG", "2nd activity - startActivityForResult"); 
    Intent intent = new Intent(Activ2.this, Activ3.class); 

    startActivityForResult(intent, 1009); 

    Intent intent2 = new Intent(); 
    intent2.putExtra("KEY1", "VALUE1"); 


    setResult(RESULT_OK, intent2); 
    finish(); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.i("TAAAG", "2nd activity - onActivityResult"); 
    if (resultCode == RESULT_OK) { 
     Log.i("TAAAG", String.valueOf(requestCode)); 
     switch (requestCode) { 
     case 1009: 
      String info = data.getExtras().getString("KEY2"); 
      Log.i("TAAAG", "2nd activity - onActivityResult - printing result"); 
      Log.i("TAAAG", info); 
      break; 
     } 
    } 
} 

}

Tercera actividad

public class Activ3 extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Log.i("TAAAG", "3rd activity - Inserting Value and finishing"); 

    Intent intent = new Intent(); 
    intent.putExtra("KEY2", "VALUE2"); 

    setResult(RESULT_OK, intent); 
    finish(); 
} 

}

+3

Estás terminando tu segunda actividad j ust después de que lance su tercera. Entonces, por lo que sé, la primera actividad recibirá el resultado ya que la segunda ya no se está ejecutando. Intenta eliminar finish(); desde crear en Activty2 y ver qué pasa! –

+0

Sí, gracias, ¡resolvió el problema! – Chaiavi

Respuesta

2

Creo que se debe eliminar finish(); en alcrear última línea en segundo lugar la actividad ....

8

banderas uso de Actividad para remitir el resultado de la actividad súper:

intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 
+0

salvavidas !!!! –

+0

Esto debe marcarse como aceptado –

Cuestiones relacionadas