首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能将android.content.res.TypedArray转换为java.lang.AutoCloseable

不能将android.content.res.TypedArray转换为java.lang.AutoCloseable
EN

Stack Overflow用户
提问于 2022-08-26 14:10:54
回答 1查看 247关注 0票数 4

我有一个自定义视图,如下所示,我可以将其简化为:

代码语言:javascript
运行
复制
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

我的整个项目都使用了同样的方法,但这是它崩溃的唯一地方。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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方法,它是向后兼容的。

因此,总之,我只需添加以下导入:

代码语言:javascript
运行
复制
import androidx.core.content.res.use

如果您还没有它,还可以将依赖项添加到应用程序/库的build.gradle文件中。

代码语言:javascript
运行
复制
implementation("androidx.core:core-ktx:1.7.0")
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73502338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档