在 GroupAdapter 中设置"OnClickListener on on"按钮



我正在尝试为GroupAdapter RecyclerView内的按钮设置OnClickListener

我的代码:

class settings : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?, 
savedInstanceState: Bundle?
): View? {
super.onCreateView(inflater, container, savedInstanceState)
val view = inflater.inflate(R.layout.fragment_settings, container, false)
val adapter = GroupAdapter<ViewHolder>()
adapter.add(SettingTitle("Permissions"))
adapter.add(SettingCardCarInfo())

//FAILED METHOD #1
view.btn_update_settings.setOnClickListener {
Log.d("tahoma","")
Toast.makeText(activity, "Your settings were updated", Toast.LENGTH_SHORT).show()
}
//FAILED METHOD #2
adapter.setOnItemClickListener { v, settings_end ->
Log.d("tahoma",v.id.toString())
}
view.settingsRecycler.adapter = adapter
return view
}}
<小时 />
class SettingEnd : Item<ViewHolder>() {
override fun getLayout(): Int {
return R.layout.settings_end
}

override fun bind(viewHolder: ViewHolder, position: Int) {}

我尝试过的:

1 - 只需在按钮上调用 onclick 侦听器,就会给我一个空调用错误

2 - 使用适配器 onclick 侦听器确实捕获了点击,但忽略了对可点击项目的任何点击(因此对按钮没有好处(

3 - 与 #1 执行相同的操作,但通过"OnStart"方法 - 不起作用,因为"视图"在该方法中不可调用

4 - 通过视图持有者的OnBind 方法调用 onclick 侦听器 - 它确实有效(我能够检测到按钮单击(,但无法访问来自同一适配器中其他视图持有者的所需数据,其中包含我需要访问的编辑文本。

此时的任何帮助都将得到认可,用 Kotlin 语法编写的解决方案会很棒

使用RecyclerView,您需要在适配器内的视图上设置单击侦听器,如下所示:

class GroupAdapter: RecyclerView.Adapter<ViewHolder>() {
var onItemClick: (<Type Of Item>) -> Unit = {}
fun createViewHolder(ViewGroup parent, int viewType): ViewHolder {
return ViewHolder(<InflateViewHere>).apply {
itemView.findViewById<Button>(R.id.button).setOnClickListener {
onItemClick(getItem(adapterPosition))
}
}
}
}

然后在您的片段集中onItemClick单击按钮时进行处理

最新更新