2012-02-20 14 views
5

Scenario:La terza attività chiamata restituisce il risultato alla prima attività invece di inviare il risultato alla seconda attività?

  1. Prima attività inizia l'attività secondi con startSubActivity
  2. Seconda azione inizia terza attività con startSubActivity

Risultato atteso: terzo (ultimo) di attività stabilisce un risultato che viene catturato sul secondo attività suActivityResult

Risultato attuale: terzo (ultimo) di attività stabilisce un risultato che viene catturato sul onActivityResult della propria attività primo

Come posso impostare un risultato sulla terza attività che sarà preso piede terza della seconda attività (ultimo) di attività stabilisce un risultato che è preso sul onActivityResult della seconda attività?

alcuni frammenti di codice:

Prima azione

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; 
     } 
    } 
} 

}

Seconda azione

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; 
     } 
    } 
} 

}

Terza azione

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

Stai terminando la tua seconda attività j dopo aver lanciato il tuo terzo. Quindi, da quello che so, la prima attività riceverà il risultato dal momento che la seconda non è più in esecuzione. Prova a rimuovere finish(); da su crea in Activty2 e guarda cosa succede! –

+0

Sì, grazie - ha risolto il problema! – Chaiavi

risposta

2

Credo che si dovrebbe rimuovere finish(); in OnCreate nell'ultima riga Seconda azione ....

8

bandiere uso di attività ai risultati di attività di super-Forward:

intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 
+0

salva vita !!!! –

+0

Questo dovrebbe essere contrassegnato come accettato –

Problemi correlati