2013-02-21 13 views
6

Zastanawiam się, czy możliwe jest przetwarzanie danych z np. aktywność 2 i aktywność 3 w działaniu 1, które mają jeden onActivityResult(), czy też muszę mieć jedną metodę dla każdego działania, które zwraca dane?Obsługiwać dane z kilku działań w jednym onActivityResult()?

Czynność 1 to główne działanie aplikacji.

aktywny 1:

// Handle return value from activity 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == Activity.RESULT_OK) { 
     String imageId = data.getExtras().getString("imageId"); 

     // Do something if data return from activity 2 ?? 

     // Do something if data return from activity 3 ?? 
    } 
} 

aktywny 2

Intent intent = new Intent(); 
intent.putExtra("imageId", imagePath); 
setResult(RESULT_OK, intent); 
finish(); 

aktywny 3

Intent intent = new Intent(); 
intent.putExtra("contactId", data); 
setResult(RESULT_OK, intent); 
finish(); 
+1

to co requestCode jest. – njzk2

Odpowiedz

7

zestaw requestCode w swojej startActivityForResult aktywności 1:

wywołującego aktywność 2

Intent intent = new Intent(this, Activity2.class); 
startActivityForResult(intent,10); 

nazywając działalność 3

Intent intent = new Intent(this, Activity3.class); 
startActivityForResult(intent,11); 

Teraz, gdy przyjdziesz do onActivityResult czeku że requestCode

jak:

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 

     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 

      case (10): 
      { 
      // do this if request code is 10. 
      } 
      break; 

      case (11): 
      { 
      // do this if request code is 11. 
      } 
      break; 
    } 
+0

Jest super.onActivityResult (requestCode, kod wynikowy, dane); niezbędny? –

+0

Klasy pochodne muszą odwoływać się do implementacji tej metody przez super-klasę. Jeśli tego nie zrobi, zostanie rzucony wyjątek. – KDeogharkar

+0

Ogólnie rzecz biorąc (nie w przypadku urządzeń z Androidem), kiedy czerpiesz, powinieneś połączyć się z metodami nadklasy, chyba że wiesz, że nie powinieneś. To decyzja, która musi być rozpatrywana osobno dla każdego przypadku, ale domyślnym (powiedziałbym) byłoby to, że to robisz. – KDeogharkar

6

No confusion check result code and request code ..

przykład:

0.123.
private static final int TWO = 2; 
private static final int THREE = 3; 

startActivityForResult(new Intent(this,Activity2.class),TWO); // one for Activity 2 
startActivityForResult(new Intent(this,Activity3.class),THREE); 

i

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == Activity.RESULT_OK) { 
     if(requestCode == TWO) { 
      // Activity two stuff 
     } else if(requestCode == THREE) { 
      // Activity three stuff 
     } 
    } 
} 
Powiązane problemy