【问题标题】:Remove item from arrayadapter not working从 arrayadapter 中删除项目不起作用
【发布时间】:2021-02-05 14:50:52
【问题描述】:

尝试使用微调器,使其动态我正在使用 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,我发现很难确定问题的根源。

【问题讨论】:

    标签: java android kotlin exception android-arrayadapter


    【解决方案1】:

    如果您使用资源数组创建 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
        }
    

    【讨论】:

    • 谢谢你的解释,这解决了!
    猜你喜欢
    • 2015-06-02
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多