如何从 Kotlin 中的 MultiSelectSpinner 获取逗号分隔的项目 ID

How to get comma separated item IDs from MultiSelectSpinner in Kotlin

我在我的 Kotlin 项目中使用 Github 中的这个 MultiSelectSpinner 控件。我不知道如何从此控件中获取所选项目的 Id,我需要将所有所选项目的逗号分隔 ID 字符串设置为 tv_engineer_ids TextView 控件。

布局代码:

<TextView
                android:id="@+id/tv_engineer_ids"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />

            <io.apptik.widget.multiselectspinner.MultiSelectSpinner
                android:id="@+id/spin_engineer"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="15dp"
                />

科特林代码:

val engineers: ArrayList<String> = ArrayList<String>();
    addJobResponse.engineerList!!.forEach {
        engineers.add(it.name!!);
    }

    spin_engineer.setItems(engineers)
            .setListener<BaseMultiSelectSpinner>(object: BaseMultiSelectSpinner.MultiSpinnerListener {
                override fun onItemsSelected(selected:BooleanArray) {
                    //Toast.makeText(context, selected.toString(), Toast.LENGTH_LONG).show()
  // Need to set comma separated IDs here
                    selected.forEach {
                        Toast.makeText(context, it.toString(), Toast.LENGTH_LONG).show()
                    }

                }
            })

engineerListEngineer 数据的列表 class.

EngrList 数据Class代码:

data class Engineer (
    @SerializedName("Id")
    @Expose
    var id: Long? = null,
    @SerializedName("Name")
    @Expose
    var name: String? = null)

首先,您可以使用 map:

,而不是一开始就使用 forEach 并向新的 ArrayList 一个接一个地添加工程师
val engineers: List<String> = engineerList.map { it.name!! }

然后,在侦听器中,您可以使用 filterIndexed 获取索引上的 Engineer 列表,其中 selected 数组包含 true

val selectedEngineers: List<Engineer> = engineerList
        .filterIndexed { index, engineer -> selected[index] }

最后,对于逗号分隔列表,joinToString:

println(selectedEngineers.joinToString { it.id!!.toString() })