【问题标题】:Set OnClickListener on Button in GroupAdapter在 GroupAdapter 中的按钮上设置 OnClickListener
【发布时间】:2019-09-28 20:06:50
【问题描述】:

我正在尝试为 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 - 使用 Adapter onclick 侦听器确实捕获了点击,但忽略了对可点击项目的任何点击(因此对按钮没有好处)

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

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

在这一点上的任何帮助都会得到帮助,用 Kotlin syntex 编写的解决方案会很棒

【问题讨论】:

    标签: android android-studio kotlin android-recyclerview


    【解决方案1】:

    使用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 中处理单击按钮时的处理

    【讨论】:

      猜你喜欢
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多