有什么方法可以传递一个有View.OnClickListener的Parcelable(通过Intent)吗?
基本上我希望能够从任何地方启动一个常见的Actvity并将OnClickListener传递给一个在Activity上定义的按钮。
或者我不需要发送OnClickListener,它只是一个固定的OnClickListener可以回调的自定义接口实现,问题是我看不到任何方式来包裹任何类似回调(一种方法,以后可以被称为)
我曾尝试过以下
destParcel.writeValue(mListener)
但它抛出了以下内容
java.lang.RuntimeException: Parcel: unable to marshal value
那么无论如何要编写一个可包含的回调?
答案 0 :(得分:5)
有什么方法可以传递一个有View.OnClickListener的Parcelable(通过Intent)吗?
没有任何有意义的方式。 Parceling是按值复制的,而不是按引用复制的,因此它与接收方的对象不同于发送方。
基本上我希望能够从任何地方启动一个常见的Actvity并将OnClickListener传递给一个在Activity上定义的按钮。
使用活动巴士(Square's Otto,greenrobot的EventBus,LocalBroadcastManager
等)。
或者,使用PendingIntent
。
或者,使用Messenger
。
或者,使用ResultReceiver
,这是与“parcellable callback”最接近的事情。
答案 1 :(得分:0)
您必须创建一个扩展View.OnClickListener并实现Parcelable接口的类。如果您有多个侦听器,则可以使用要调用的方法实现公共接口。
只要您可以保存和恢复包中的所有班级成员,这将有效。但是,如果您的侦听器想要引用View对象,那么这将无效并且发送它没有多大意义。