微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从阵列适配器中删除项目不起作用

如何解决从阵列适配器中删除项目不起作用

尝试使用微调器以使其动态化,我使用的是 Arrayadapter。但是我无法删除项目,它只是不断崩溃。请参阅下面的代码

属性

private lateinit var adp : ArrayAdapter<CharSequence>

以及适配器的初始化。

adp = ArrayAdapter.createFromresource(this,R.array.values_array,android.R.layout.simple_spinner_item)
adp.also {   adapter ->

        
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter}

单击其中一个项目后,我想在单击另一个按钮时将其从微调器中删除,使用下面的代码

button.setonClickListener{
        adp.remove(spinner.selectedItem.toString())
        adp.notifyDataSetChanged()
    }

remove那一行,抛出java.lang.UnsupportedOperationException异常。 由于这是第一次使用 Kotlin,我发现很难确定问题的根源。

解决方法

如果您使用资源数组创建 ArrayAdapter,它会将其数据视为不可变的,这意味着如果您尝试修改它,它将抛出 UnsupportedOperationException。我认为他们忽略了将此注释添加到 createFromResource 的文档中,但您可以在它间接调用的构造函数的文档中看到它。不幸的是,该链接无法通过 Stack Overflow 工作,但您可以通过 Ctrl+单击您正在调用的函数,然后 Ctrl+单击 createFromResource 方法在源代码中调用的构造函数,在您的 IDE 中找到它.

解决方法是直接加载资源并使用不会导致不可变支持数据的构造函数:

adp = ArrayAdapter(
    this,android.R.layout.simple_spinner_item,resources.getStringArray(R.array.values_array).toMutableList()
).apply {
        setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = this
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。