Как получить разделенные запятыми идентификаторы элементов из MultiSelectSpinner в Kotlin - PullRequest
0 голосов
/ 21 мая 2018

Я использую этот MultiSelectSpinner элемент управления от Github в моем проекте Kotlin.Я не знаю, как получить 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()
                    }

                }
            })

engineerList список Engineer класс данных.

Код класса данных EngrList:

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

1 Ответ

0 голосов
/ 21 мая 2018

Во-первых, вместо использования forEach и добавления инженеров к новому ArrayList по одному в начале, вы можете использовать map:

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() })
...