多次点击,防抖动的插件相关问题
使用了你的点击防抖动插件,发现对Java有效,对kotlin无效。我的项目是Java和kotlin混合开发的。请问有什么解决方法,是不是没有适配kotlin?
用的kotlin版本多少 试验下非lambda写法
kotlin v1.6.10 非Lambda写法正常,Lambda写法无效:
.setOnClickListener { Log.i("demo", "这种写法无效") }
.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { Log.i("demo", "这种写法有效") } })
大佬,有空的时候帮忙看看
哦 lambda 问题我大概知道了, 我偷懒了 没写 你随便在lambda加个外部引用应该也行
kotlin v1.6.10 非Lambda写法正常,Lambda写法无效:
.setOnClickListener { Log.i("demo", "这种写法无效") }
.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { Log.i("demo", "这种写法有效") } })
大佬,有空的时候帮忙看看
大佬有什么想法解决了吗?我看是字节码是有个invokeDynamic的指令,有个静态方法作为类似的点击方法,是不是判断找到这个点击的静态方法插入代码就行了
没有外部引用的lambda会被变成一个静态的 所以只是需要把原来的double tap的类转化成一个静态函数,所以我就偷懒没写而已 ,整体思路一致 没有太大变化
@Leifzhang 大佬:
我给每一个 lambda 都生成了 静态的 DoubleTapCheck
public static final DoubleTapCheck doubleTapStatic_onCreate$lambda_0 = null;
public static final DoubleTapCheck doubleTapStatic_onCreate$lambda_1 = null;
public static final DoubleTapCheck doubleTapStatic_onCreate$lambda_2 = null;
public MainActivity() {
doubleTapStatic_onCreate$lambda_0 = new DoubleTapCheck();
doubleTapStatic_onCreate$lambda_1 = new DoubleTapCheck();
doubleTapStatic_onCreate$lambda_2 = new DoubleTapCheck();
}
不知道这样做会不会有什么问题
我觉得没啥问题 讲道理
已经改成 这种写法了 。。。。。
private static final DoubleTapCheck doubleTapStatic_onCreate$lambda_0 = new DoubleTapCheck();
private static final DoubleTapCheck doubleTapStatic_onCreate$lambda_1 = new DoubleTapCheck();