今天擼代碼的時候剛開始還好好的,能正常編譯,突然加了啥代碼后突然就是不能編譯了,報錯如下:
看報錯,是約束布局類找不到,還以為是gradle抽風(fēng)拉不到依賴了,嘗試改ConstraintLayout的編譯版本,檢查科學(xué)上網(wǎng),沒得卵用,無語至極!
百度谷歌這些關(guān)鍵報錯信息:
unresolved supertypes: androidx.constraintlayout.widget.ConstraintLayout
Adding -Xextended-compiler-checks argument might provide additional information.
還是沒得關(guān)鍵信息
最后復(fù)盤了哈出問題的時間和大概修改的類,重新拉了個之前沒報錯的commit代碼來一個類一個方法的新增,確定出問題的地方,最后排查到,居然是設(shè)置了一個回調(diào)方法導(dǎo)致,報錯信息和出問題地方感覺很難關(guān)聯(lián)到一起,只能懷疑是因為報錯導(dǎo)致后面的引用失敗了,也是離了個大譜!
- 當(dāng)時類結(jié)構(gòu)是如下這樣:
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上調(diào)用方式如下:
XXXUtilsTool.getInstance().setOnFloatBallBtnClickListener(object : XXXUtilsTool.DragFloatBtnView.OnDragFloatBtnClickListener{
override fun onFloatSubBtnClick(xxx: XXX) {
})
- 結(jié)果問題就出在這個調(diào)用setOnFloatBallBtnClickListener上,注釋掉就沒問題,添加上報錯,后來只能懷疑單例類里面包含內(nèi)部類,再包含interface接口,估計不得行,后來把DragFloatBtnView整個類提出來還是不行,看來interface接口只能單獨提出來,結(jié)果就是提出來就ok了,特此記錄,以做參考!