我有一个自定义视图,如下所示,我可以将其简化为:
class MyCustomView : FrameLayout {
constructor(context: Context) : super(context) {
initView(null)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
initView(attrs)
}
constructor(context: Context, attrs: AttributeSet?, @AttrRes defStyleAttr: Int)
: super(context, attrs, defStyleAttr) {
initView(attrs)
}
private fun initView(attrs: AttributeSet?) {
attrs?.let {
context.theme.obtainStyledAttributes(attrs, R.styleable.MyCustomView, 0, 0).use {
if (it.hasValue(R.styleable.MyCustomView_my_custom_attribute)) {
//...
}
}
}
}
}
问题是,我得到了一个例外:在执行android.content.res.TypedArray方法时,不能将java.lang.AutoCloseable转换为obtainStyledAttributes
。
我的整个项目都使用了同样的方法,但这是它崩溃的唯一地方。为什么会这样呢?
发布于 2022-08-26 14:10:54
我已经意识到我使用的是来自AutoCloseable
接口的方法AutoCloseable
,但是由obtainStyledAttributes
方法返回的类TypedArray
只实现了自从Android 31,并且我正在一个更低的API上进行测试。
在它工作的地方,我使用的是androidx.core:core-ktx:1.7.0
库中的androidx.core:core-ktx:1.7.0
方法,它是向后兼容的。
因此,总之,我只需添加以下导入:
import androidx.core.content.res.use
如果您还没有它,还可以将依赖项添加到应用程序/库的build.gradle
文件中。
implementation("androidx.core:core-ktx:1.7.0")
https://stackoverflow.com/questions/73502338
复制相似问题