[英]implement click listener on recycler view fragment
我像这样在适配器上使用点击监听器
在适配器中:
private var onItemClickListener: ((TansitionModel) -> Unit)? = null
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val article = differ.currentList[position]
holder.itemView.apply {
setOnClickListener { shit->
onItemClickListener?.let {
it(article)
}
}
}
}
fun setOnItemClickListener(listener: (TansitionModel) -> Unit) {
onItemClickListener = listener
}
在片段中:
financeTransitionAdapter.setOnItemClickListener {
val extras = FragmentNavigator.Extras.Builder()
.addSharedElement(
requireView().findViewById(R.id.imgsd),
"trans").build()
findNavController(requireView())
.navigate(R.id.action_FirstFragment_to_showTransitionFragment,
null,
null,
extras
)
}
现在有了这个架构,我如何将多个参数,如视图和其他数据类型(全部)从适配器单击侦听器传递到片段?
我没有您正在使用的适配器的完整代码,但我会尝试帮助我的项目中的一段代码。
首先,您需要做的是创建一个这样的界面:
interface AccountClickListener {
fun onAccountClick(savedAccountModel: SavedAccountModel)
}
您可以向此 function 添加任意数量的参数。
现在在您的适配器 class 构造函数中实现此接口,如下所示:
class ChangeAccountAdapter(
val context: Context,
val arrayList: ArrayList<SavedAccountModel>,
val accountClickListener : AccountClickListener)
: RecyclerView.Adapter<ChangeAccountAdapter.ChangeAccountHolder>(){
//your adapter class code
}
您的支架 Class 应如下所示:
inner class ChangeAccountHolder(val itemView : View) : RecyclerView.ViewHolder(itemView){
val imageView : ImageView = itemView.findViewById(R.id.savedaccountimg)
init {
imageView.setOnClickListener{accountClickListener.onAccountClick(arrayList[adapterPosition])}
}
现在,您可以在您的活动或片段中实现您的点击侦听器,如下所示:
class Profile : Fragment(), AccountClickListener{
override fun onAccountClick(savedAccountModel: SavedAccountModel) {
// Code for what you want to do on clicking the item.
}
}
最后,您可以像这样定义您的适配器:
val adapter = ChangeAccountAdapter(requireContext(),modelList,this)
对于此架构,您只需更改您使用的 lambda 的接收器。 也许像这样。
private var onItemClickListener: ((TansitionModel,String, View) -> Unit) = {_, _, _ ->} // maybe use it like this instead of making it null
fun setOnItemClickListener(listener: (TansitionModel,String, View) -> Unit) {
onItemClickListener = listener
}
然后使用附加参数调用它。 然后你可以像这样使用它们。
financeTransitionAdapter.setOnItemClickListener { model, myString, view ->
// use the variables
}
但是,我建议使用其他答案所建议的界面方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.