2012-02-20 10 views
5

Scenariusz:Trzecia aktywność o nazwie zwraca wynik do pierwszego działania zamiast wysyłać wynik do drugiego działania?

  1. Pierwsza aktywność rozpoczyna działalność sekund z startActivityForResult
  2. drugie działanie zaczyna trzeci aktywność z startActivityForResult

Oczekiwany wynik: trzecia (ostatnia) Aktywność wyznacza wynik, który jest złowionych na sekunda aktywność użytkownika onActivityResult

Obecny wynik: trzecia (ostatnia) Aktywność wyznacza wynik, który jest pozyskanych na pierwszy aktywności za onActivityResult

Jak mogę ustawić wynik na trzecim aktywności, które zostaną złowione na drugim aktywność trzeci (ostatni) Aktywność wyznacza wynik, który jest przyłapany na działaniu onActivityResult drugiej akcji?

Niektóre fragmenty kodu:

pierwszą czynnością

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

}

drugie aktywność

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

}

aktywność trzecie

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

Kończysz drugą aktywność j ust po uruchomieniu trzeciego. Z tego, co wiem, pierwsze działanie otrzyma wynik, ponieważ drugi już nie działa. Spróbuj usunąć wykończenie(); od razu utwórz w Activty2 i zobacz, co się stanie! –

+0

Tak, dziękuję - rozwiązało problem! – Chaiavi

Odpowiedz

2

myślę należy usunąć finish(); w onCreate ostatniej linii w Second aktywności ....

8

flag USE działalności do przekazania doprowadzić do super-aktywności:

intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 
+0

ratownik !!!! –

+0

To powinno być oznaczone jako zaakceptowane –

Powiązane problemy