gpt4 book ai didi

android - 如何从 Kotlin 中的适配器调用 fragment 的函数?

转载 作者:行者123 更新时间:2023-12-02 13:34:43 25 4
gpt4 key购买 nike

我是 Kotlin android 开发的初学者,无法从适配器调用 fragment 函数。关注 this方法,我写了下面的代码,但仍然没有运气。

适配器代码

class CallItemAdapter(
val context: Context,
private val callItems: List<CallItem>,
private val listener: ClickListener
) : RecyclerView.Adapter<CallItemAdapter.MyViewHolder>() {
interface ClickListener {
fun onClickListener(item: CallItem)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val callItemView = LayoutInflater.from(context).inflate(R.layout.item_call, parent, false)
return MyViewHolder(callItemView)
}

override fun getItemCount(): Int {
return callItems.size
}

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val callItem = callItems[position]
holder.setData(callItem, position, listener)
}

inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private var currentCallItem: CallItem? = null
private var currentPosition: Int = 0

init {
itemView.btnCall.setOnClickListener {
// TODO
}
}

fun setData(callItem: CallItem?, position: Int, listener: ClickListener) {
itemView.txtPersonName.text = callItem!!.name
itemView.txtTask.text = callItem.task
itemView.setOnClickListener {
listener.onClickListener(callItem)
}

this.currentCallItem = callItem
this.currentPosition = position
}
}
}

fragment 代码
class CallingWorkFragment : Fragment(), CallItemAdapter.ClickListener {
override fun onClickListener(item: CallItem) {
println("Interface working")
context!!.applicationContext.showToast("Wubba lubba dub dub")
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_work_calling, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

val callItems: MutableList<CallItem> = ArrayList()

val adapter = CallItemAdapter(activity!!.applicationContext, callItems, this)
recyclerViewCallItem.adapter = adapter
}
.
.
.

但点击时什么都没有发生。请让我知道我做错了什么。
编辑:我添加了完整的适配器代码。

最佳答案

你应该:

class CallItemAdapter(
val context: Context,
private val callItems: List<CallItem>,
private val listener: ClickListener
) : RecyclerView.Adapter<CallItemAdapter.MyViewHolder>() {
interface ClickListener {
fun onClickListener(item: CallItem)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val callItemView = LayoutInflater.from(context).inflate(R.layout.item_call, parent, false)
return MyViewHolder(callItemView)
}

override fun getItemCount(): Int {
return callItems.size
}

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val callItem = callItems[position]
holder.setData(callItem, position)

holder.itemView.setOnClickListener {
listener.onClickListener(callItem)
}

// or
holder.itemView.btnCall.setOnClickListener {
// TODO
}
}

class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private var currentCallItem: CallItem? = null
private var currentPosition: Int = 0

fun setData(callItem: CallItem?, position: Int) {
itemView.txtPersonName.text = callItem!!.name
itemView.txtTask.text = callItem.task

this.currentCallItem = callItem
this.currentPosition = position
}
}
}

关于android - 如何从 Kotlin 中的适配器调用 fragment 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59434099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com