今天撸代码的时候刚开始还好好的,能正常编译,突然加了啥代码后突然就是不能编译了,报错如下:
error msg
看报错,是约束布局类找不到,还以为是gradle抽风拉不到依赖了,尝试改ConstraintLayout的编译版本,检查科学上网,没得卵用,无语至极!
百度谷歌这些关键报错信息:
unresolved supertypes: androidx.constraintlayout.widget.ConstraintLayout
Adding -Xextended-compiler-checks argument might provide additional information.
还是没得关键信息
最后复盘了哈出问题的时间和大概修改的类,重新拉了个之前没报错的commit代码来一个类一个方法的新增,确定出问题的地方,最后排查到,居然是设置了一个回调方法导致,报错信息和出问题地方感觉很难关联到一起,只能怀疑是因为报错导致后面的引用失败了,也是离了个大谱!
- 当时类结构是如下这样:
package com.xx.xx.xx
...
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
...
class XXXUtilsTool {
companion object {
private var mInstance: XXXUtilsTool? = null
@JvmStatic
@Synchronized
fun getInstance(): XXXUtilsTool {
if (mInstance == null) mInstance = XXXUtilsTool()
return mInstance!!
}
}
...
class DragFloatBtnView : ConstraintLayout {
...
private var onDragFloatBtnClickListener: OnDragFloatBtnClickListener? = null
...
@SuppressLint("Recycle")
constructor(context: Context) : super(context) {
...
}
fun setOnDragFloatBtnClickListener(onDragFloatBtnClickListener: OnDragFloatBtnClickListener?) {
this.onDragFloatBtnClickListener = onDragFloatBtnClickListener
}
...
interface OnDragFloatBtnClickListener{
fun onFloatSubBtnClick(xxx: XXX)
}
}
}
- 主Activity上调用方式如下:
XXXUtilsTool.getInstance().setOnFloatBallBtnClickListener(object : XXXUtilsTool.DragFloatBtnView.OnDragFloatBtnClickListener{
override fun onFloatSubBtnClick(xxx: XXX) {
})
- 结果问题就出在这个调用setOnFloatBallBtnClickListener上,注释掉就没问题,添加上报错,后来只能怀疑单例类里面包含内部类,再包含interface接口,估计不得行,后来把DragFloatBtnView整个类提出来还是不行,看来interface接口只能单独提出来,结果就是提出来就ok了,特此记录,以做参考!
网友评论