从arrayadapter中移除不工作的项



尝试使用旋转器,使其动态,我使用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()
}

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

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

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

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
}

最新更新