2014-11-02 76 views
8

是否可以將對象作爲活動結果從子活動返回給父項?就像這樣:作爲活動結果的Android返回對象

Intent resultIntent = new Intent(null); 
resultIntent.putExtra("STRING_GOES_HERE", myObject); 
setResult(resultIntent); 
finish(); 

如果有可能,我應該如何檢索myObject在父母的活動?

我想通了,那檢索數據,我需要做這樣的事情:

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQ_CODE_CHILD) { 
     MyClass myObject = data.getExtra("STRING_GOES_HERE"); 
    } 
} 

的事情是,我得到的錯誤,無法解析法「getExtra」 ....

+0

閱讀Java序列化。 – Simon 2014-11-02 20:01:27

+0

嗯...問題是'startActivityForResult(Intent,int)'我不能通過對象而不是整數首先... – 2014-11-02 20:09:56

回答

12

你不能返回一個對象,但是你可以返回一個包含你的對象的意圖(假設它們是基本類型,可序列化或可分段的)。

在你的孩子的活動,代碼將是這樣的:

int resultCode = ...; 
Intent resultIntent = new Intent(null); 
resultIntent.putExtra("STRING_GOES_HERE", myObject); 
setResult(resultCode, resultIntent); 
finish(); 

在你父母的活動,您需要與startActivityForResult啓動子活動:

public final static int REQ_CODE_CHILD = 1; 

... 
Intent child = new Intent(getPackageName(), "com.something.myapp.ChildActivity"); 
startActivityForResult(child, REQ_CODE_CHILD); 

,然後在onActivityResult,您將擁有:

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQ_CODE_CHILD) { 
     MyClass myObject = data.getExtras().getSerializable("STRING_GOES_HERE"); 
    } 

    ... 
} 

您可以閱讀回合Activity javadoc page上的方法。

+0

Canot解決方法'getExtra'?爲什麼? – 2014-11-02 20:29:06

+0

對不起,沒有想到直。您需要檢索捆綁包,然後單獨額外購買。我更新了我的答案(假設您的對象是可序列化的) – 2014-11-03 21:56:06

+0

您的MyClass類需要'實現Serializable'才能使其工作。 – Zapnologica 2016-02-16 05:36:34

3

請查看this answer,其中解釋瞭如何使用startActivityForResultonActivityResult

對於SerializableParcelable的任何對象,此相同的過程都可以使用。因此,如果myObject是您創建的自定義類,則需要實現其中一個接口。

相關問題