【问题标题】:How to parcelize a function in kotlin如何在 kotlin 中分割函数
【发布时间】:2022-11-28 23:47:32
【问题描述】:

我想制作一个可打包的数据类来放置捆绑包。此数据类还包含我将调用的函数。但是当我放回应用程序时,parcelize 出现异常。这是我的可打包数据类,

@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
    )
}

}

但这是行不通的。

【问题讨论】:

    标签: android kotlin lambda badparcelableexception


    【解决方案1】:

    我用下面的监听器类解决了这个问题;

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

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

    val onPressOkey:Listener = Listener {}
    

    你也可以称之为onPressOkey;

     yourDataClass.onPressOkey.onClick()
    

    【讨论】:

      【解决方案2】:

      关键是注解@IgnoredOnParcel。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-10
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多