如何在kotlin中打包函数

ryoqjall  于 2022-11-30  发布在  Kotlin
关注(0)|答案(2)|浏览(136)

我想创建一个可打包的数据类来放置bundle。这个数据类还包含一个我将调用的函数。但是当我放回应用程序时,我遇到了打包异常。这是我的可打包数据类,

@Parcelize
data class TransactionConfirmData(
val title: String,
@StringRes val cancelBtnLabel: Int
@StringRes val confirmBtnLabel: Int
val confirmElements: Map<String, String>,
val customConfirmDataList: List<CustomTransactionConfirmData> = emptyList(),
val requestMethodId: Int,
@NavigationRes val cancelDestination: Int = 0,
val contentStructure: 
    TransactionBodyContentCaseTransactionBodyContentCase.BASE_CONFIRM,
 @IgnoredOnParcel val onPressFunction: Serializable

):可打包{

fun onPressOkey() = onPressFunction as () -> Unit

companion object {
    fun create(
        title: String,
        @StringRes cancelBtnLabel: Int = R.string.bottom_sheet_behavior
        @StringRes confirmBtnLabel: Int = R.string.bottom_sheet_behavior
        confirmElements: Map<String, String>,
        customConfirmDataList: List<CustomTransactionConfirmData> = emptyList(),
        requestMethodId: Int,
        @NavigationRes  cancelDestination: Int = 0,
        contentStructure: TransactionBodyContentCase = 
               TransactionBodyContentCase.BASE_CONFIRM,
        onPressFunction: ()->Unit = {}
    ): TransactionConfirmData = TransactionConfirmData(
        title,
        cancelBtnLabel,
        confirmBtnLabel,
        confirmElements,
        customConfirmDataList,
        requestMethodId,
        cancelDestination,
        contentStructure,
        onPressFunction as Serializable
    )
}

}
但这样不行。

wz8daaqr

wz8daaqr1#

我用一个侦听器类解决了这个问题,如下所示;

class Listener(val clickAction:()->Unit):Parcelable{
   fun onClick() = clickAction()
}

然后在数据类中创建这样的字段;

val onPressOkey:Listener = Listener {}

您也可以调用此按钮onPressOkey;

yourDataClass.onPressOkey.onClick()
axr492tv

axr492tv2#

关键字是注记@IgnoredOnParcel。

相关问题