2014-01-29 47 views
1

有沒有什麼辦法可以傳遞一個Parcelable(通過意圖),它有一個View.OnClickListener它?Android包裹和傳遞一個對象與監聽器

基本上我希望能夠從任何地方啓動一個常見的Actvity,並通過OnClickListener爲Activity上定義的按鈕傳遞。

或者我不需要發送OnClickListener,它可以只是一個固定的OnClickListener可以回調的自定義接口實現,問題是我看不到任何方式來包裹任何類似回調(方法可後來被稱爲)

我曾嘗試以下

destParcel.writeValue(mListener) 

,但它引發了以下

java.lang.RuntimeException: Parcel: unable to marshal value 

那麼,有沒有anyw唉寫一個包裹回調?

回答

5

有什麼辦法可以傳遞一個Parcelable(通過Intent),它有一個View.OnClickListener嗎?

沒有任何有意義的方式。包裹是按值複製的,而不是按照引用複製的,所以它在接收端與發送端不是同一個對象。

基本上我希望能夠從任何地方啓動一個常見的Actvity,並通過OnClickListener爲Activity上定義的按鈕傳遞。

使用事件總線(Square的Otto,greenrobot的EventBus,LocalBroadcastManager等)。或者,使用PendingIntent。或者,使用Messenger

或者,使用ResultReceiver,這是最接近「可回包調用」的東西。

+0

謝謝,在一個案例中,我想調用第三方類的方法,我無法制作包裹,這就是爲什麼我試圖讓偵聽器本身可以分類。我會看看如何通過PendingIntent實現我想要的,然後使用Otto。感謝您的指導! –

0

您將不得不創建一個擴展View.OnClickListener並實現Parcelable接口的類。如果你有多個監聽器,他們可以用你想調用的方法實現一個通用接口。

只要您可以保存和恢復所有班級成員進入parcel,這將工作。但是,如果您的偵聽器想要引用View對象,這將不起作用,發送它不會有多大意義。

+0

不,它需要發送意圖和/或採取其他行動,但不參考任何內容。但據我所知,我仍然無法寫出Parcelable。如何包裹對另一個可執行方法的引用? –

+0

該方法應該在您的新班級中定義。您稍後發送該類的一個實例,然後發送unparcel。現在有方法需要額外的工作,只有成員必須妥善保存/恢復。 – azertiti

+0

Thansks試圖幫助 –