2016-11-03 53 views
1

如何在Android上將原始對象從一個活動傳遞給另一個活動?當然,我們可以序列化(Serializable,Parcelable,從/到JSON)並傳遞對象數據的副本,並且可以創建一個具有相同數據的新對象;但它不會有相同的參考。如何在Android上將原始對象從一個活動傳遞到另一個活動

下面是一些解決方案:

代碼對於第一活動:

final Object objSent = new Object(); 
final Bundle bundle = new Bundle(); 
bundle.putBinder(OBJECT_KEY, new ObjectWrapperForBinder(objSent)); 
startActivity(new Intent(this, SecondActivity.class).putExtras(bundle));   

代碼用於第二活動:

final Object objReceived = ((ObjectWrapperForBinder)getIntent().getExtras().getBinder(OBJECT_KEY)).getData(); 

但最小API級別所需

還有其他的方法嗎?

+2

你想通過 '過客' 原始對象到另一個活動要實現什麼?全球課程是否可以持有該對象並從其他活動中檢索? –

回答

0

SOLUTION: BundleCompat允許在所有Android版本中使用putBinder/getBinder。

ActivityA:

final Bundle bundle = new Bundle(); 
BundleCompat.putBinder(bundle,KEY, new ObjectWrapperForBinder(callback)); 
intent.putExtras(bundle); 

ActivityB:

object = ((ObjectWrapperForBinder)BundleCompat.getBinder(intent.getExtras(),KEY)).getData(); 
-2

示例對象應該可以Parcelable。

SampleObject objSent=new SampleObject(); 
Intent intent=new Intent(mContext,NewActivity.class); 
intent.putExtra(objSent); 
startActivity(intent); 
0

這取決於你的目標。
如果您要在一個流程中工作,則只需使用Singleton模式即可。 但是,如果你想通過你的真實對象,例如Service,這屬性android:isolatedProcess="true"

<service 
    android:name=".service.SomeService" 
    android:enabled="true" 
    android:exported="false" 
    android:isolatedProcess="true"/> 

然後你可以不是你的出身對象傳遞到另一個進程。

你不能。一個進程中的應用程序不能保存另一個進程中的對象,更不用說「調用操作」了。

來源:Passing Objects in IPC using Messenger in Android

所以,我可以看到你are're嘗試使用Intent機制來傳遞你的源對象。在我看來,不可能通過Intent來完成,因爲中包含的Bundle不存儲對真實對象的引用。所以,這是不可能的。

0

在這種情況下,EventBus將是一個不錯的選擇。它就像全局的Subscribe-Observer,它可以幫助在任何對象之間傳遞原始對象。

EventBus.getDefault().register(this); 
EventBus.getDefault().post(new MessageEvent()); 

要接收對象執行此操作的活動:要傳遞一個對象在活動

做這個

首先,註冊活動:

EventBus.getDefault().register(this); 

其次,用@Subscriber定義接收對象的方法:

@Subscribe 
public void onMessageEvent(MessageEvent event) 

希望這會有所幫助。

相關問題