liangjingkanji / BRV

[使用文档] Android 快速构建 RecyclerView, 比 BRVAH 更简单强大
http://liangjingkanji.github.io/BRV/
MIT License
2.58k stars 327 forks source link

请教点击事件的添加方法 #153

Closed boboqun closed 2 years ago

boboqun commented 2 years ago

问题描述

类似我下边这样写代码的话,第一个被添加的model不能触发点击事件,从第二个开始后边都能触发。 请教正确的使用方法

    override fun initView() {
        binding.rv.setup {
            addType<SuperTableDropSelectModel>(R.layout.item_super_table_drop_select)
            onBind {
                if (itemViewType == R.layout.item_super_table_drop_select) {
                    R.id.rl_super_table_drop_select_add.onFastClick {
                        ToastUtils.showShort("点了")
                    }
                }
            }
        }
    }

期望行为

正常触发点击事件

如何复现

完整复现项目

截图

异常堆栈信息或者手机截图/视频

版本

liangjingkanji commented 2 years ago
override fun initView() {
    binding.rv.setup {
        addType<SuperTableDropSelectModel>(R.layout.item_super_table_drop_select)
        R.id.rl_super_table_drop_select_add.onFastClick {
            // 如果此ID被多个类型使用, 请在这里判断下itemViewType
            ToastUtils.showShort("点了")
        }
    }
}

如果只是设置点击事件这样即可. onBind无需调用

onBind里面设置点击事件应当使用findView(R.id.view).setOnClickListener

boboqun commented 2 years ago

通过这个方法确实可以了

    findView<RelativeLayout>(R.id.rl_super_table_drop_select_add).setOnClickListener {
        ToastUtils.showShort("点了")
    }

但是我看您 demo 里好多用 BindingAdapter 里的 onFastClick 或者 onClick 实现的添加点击事件。 可是我那样写为什么会只有第一个 item 的点击事件添加不成功呢?

liangjingkanji commented 2 years ago

你看仔细点,我可没写onBind里面

liangjingkanji commented 2 years ago

每次列表滑动都会执行onBind方法,你写里面会导致一直重置点击监听器

boboqun commented 2 years ago

好嘞,知道做法了