Kotlin RecyclerView Adapter 多个回调函数

Kotlin RecyclerView Adapter multiple callback functions

如何将多个回调函数返回到 RecyclerView 的 Activity/Fragment?

我对 RecyclerView 中的每个项目都有多个选项(编辑、删除、CheckedAsComplete、查看),我想在 RecyclerView 的 Activity/Fragment 中为每个项目设置回调函数。

这里是 link 我如何在适配器中获得一个回调:https://www.geeksforgeeks.org/kotlin-lambda-functions-for-recyclerview-adapter-callbacks-in-android/

我只需要知道适配器中是否可以有多个回调,如果可以,我该如何实现?

我的 Activity 的适配器代码:

val adapter = ProductAdapter(this) {
    deleteProduct(it),
    editProduct(it),
    viewProduct(it),
    checkAsComplete(it)
}

这是我的适配器的构造函数:

class ProductAdapter(
    private var context: Context,
    private val deleteProduct: (ItemTable) -> Unit,
    private val editProduct: (ItemTable) -> Unit,
    private val viewProduct: (ItemTable) -> Unit,
    private val checkedAsComplete: (ItemTable) -> Unit
): RecyclerView.Adapter<ProductAdapter.ItemProductViewHolder>() {
    // Rest of RecyclerView Adapter Code
}

我是 kotlin 的新手,非常感谢您的帮助!

您只能在列表的最后一个回调中使用花括号。

假设您在 activity 中声明了以下方法:

  • fun deleteProduct(itemTable: ItemTable)
  • 有趣的编辑产品(itemTable:ItemTable)
  • 有趣的 checkAsComplete(itemTable: ItemTable)
  • 有趣的 viewProduct(itemTable: ItemTable)

您可以使用命名参数,您有两种选择

有方法参考

val adapter = ProductAdapter(
    context = this,
    deleteProduct = ::deleteProduct,
    editProduct  = ::editProduct,
    viewProduct = ::viewProduct,
    checkAsComplete = ::checkAsComplete
)

使用 lambda

val adapter = ProductAdapter(
    context = this,
    deleteProduct = { deleteProduct(it) },
    editProduct  = { editProduct(it) },
    viewProduct = { viewProduct(it) },
    checkAsComplete = { checkAsComplete(it) }
)

您可以使用不同的方法。这不取决于您有多少事件。例如 enum class 你可以使用带有多个选项的单一回调

class ProductAdapter(private val clickEvent: (ClickEvent, ItemTable) -> Unit): 
    RecyclerView.Adapter<ProductAdapter.ItemProductViewHolder>() {

    enum class ClickEvent {
      DELETE,
      EDIT,
      VIEW,
      COMPLETE
    }
}

用法:

val adapter = ProductAdapter{ event, item ->
    when(event){
      DELETE -> deleteProduct(item)
      ....//All other enum values
    }
}