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
}
}
如何将多个回调函数返回到 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
}
}