Android 在GroupAdapter中设置OnClickListener on按钮

Android 在GroupAdapter中设置OnClickListener on按钮,android,android-studio,kotlin,android-recyclerview,Android,Android Studio,Kotlin,Android Recyclerview,我正在尝试为GroupAdapter RecyclerView中的按钮设置OnClickListener 我的代码: class settings : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { super.onC

我正在尝试为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
    }}
类设置:片段(){
覆盖创建视图(
充气机,
容器:视图组?,
savedInstanceState:捆绑?
):查看{
super.onCreateView(充气机、容器、savedInstanceState)
val视图=充气机。充气(R.layout.fragment\u设置,容器,错误)
val adapter=GroupAdapter()
adapter.add(设置标题(“权限”))
adapter.add(设置CardCarInfo())
//失败的方法#1
view.btn\u update\u settings.setOnClickListener{
Log.d(“tahoma”和“”)
Toast.makeText(活动,“您的设置已更新”,Toast.LENGTH\u SHORT.show())
}
//失败的方法#2
adapter.setOnItemClickListener{v,设置\u end->
Log.d(“tahoma”,v.id.toString())
}
view.settingsRecycler.adapter=适配器
返回视图
}}

类设置结束:项(){
重写getLayout():Int{
返回R.layout.settings\u结束
}
覆盖有趣的绑定(viewHolder:viewHolder,position:Int){}

我所尝试的: 1-只需在按钮上调用onclick侦听器,就会出现null调用错误

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

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

4-通过viewholder的OnBind方法调用onclick侦听器-它确实有效(我能够检测到按钮点击),但无法从同一适配器中的其他viewholder访问所需的数据,这些数据包含我需要访问的EditText


此时的任何帮助都是值得的,使用Kotlin syntex编写的解决方案将非常好

使用
RecyclerView
您需要在适配器内部的视图上设置click listener,如下所示:

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))
            }
        }
    }
}
class-GroupAdapter:RecyclerView.Adapter(){
变量onItemClick:()->Unit={}
fun createViewHolder(视图组父级,int-viewType):ViewHolder{
返回ViewHolder()。应用{
itemView.findViewById(R.id.button).setOnClickListener{
onItemClick(获取项(适配器位置))
}
}
}
}
然后,在片段集中,单击按钮时单击,以进行处理

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))
            }
        }
    }
}