簡體   English   中英

從 arrayadapter 中刪除項目不起作用

[英]Remove item from arrayadapter not working

嘗試使用微調器,使其動態我正在使用 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 工作,但您可以在 IDE 中找到它,方法是 Ctrl+單擊您正在調用的 function,然后 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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM