代码之家  ›  专栏  ›  技术社区  ›  Keval Gangani

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

  •  1
  • Keval Gangani  · 技术社区  · 6 年前

    我用这个 MultiSelectSpinner 在我的Kotlin项目中从Github控制。我不知道怎么弄 Id 从该控件中选择的项,我需要将所有选定项的以逗号分隔的ID字符串设置为 tv_engineer_ids 文本视图控件。

    布局代码:

    <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"
                    />
    

    Kotlin代码:

    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 数据类。

    工程列表数据类代码:

    data class Engineer (
        @SerializedName("Id")
        @Expose
        var id: Long? = null,
        @SerializedName("Name")
        @Expose
        var name: String? = null)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   zsmb13    6 年前

    首先,不要使用 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() })