Удалить элемент внутри счетчика при нажатии на счетчик - PullRequest
0 голосов
/ 28 марта 2019

В MainActivity он имеет spinner, где элемент получен с сервера с помощью Coroutine

Код

fun getList() {
        val service = RetrofitFactory.makeRetrofitService()
        GlobalScope.launch(Dispatchers.Main) {
            val request = WebApi.getList(context)
            request?.userName.let {
                for (i in it!!.iterator()) {
                    list.put("", "")
                    list.put("None","None")
                    list[i.name!!] = i.id!!  // Ali
                }

                spinnerName?.let { spn ->
                    spn.adapter = ArrayAdapter(context, R.layout.spinner_item, list.keys.toTypedArray())
                    val position = (spn.adapter as ArrayAdapter<String>).getPosition("")
                    spn.setSelection(position)
                }
            }
        }
    }

Во-первых, я хочу, чтобы по умолчанию показывалось вращение empty. Когда пользователь щелкает счетчик, он показывает только два элемента , которые равны «None» и «Ali».

Как мне этого добиться?

Пока что я могу установить пустую строку по умолчанию, но когда я нажимаю, в счетчике появляются 3 элемента: Нет, Али и Пустая строка.

1 Ответ

1 голос
/ 28 марта 2019

Чтобы сделать empty по умолчанию, но не в раскрывающемся списке , вы можете предоставить список адаптеров, содержащий в конце вашу сущность empty, но для количество адаптеров , укажите на один метод меньше getCount(). так что последняя запись будет игнорироваться в выпадающем списке.

Посмотрите, как это можно сделать:

val list = arrayListOf("None","Ali","Empty") // You can provide any type of list here
val adapter = object : ArrayAdapter<String>(context, itemLayout, list) {
    //Override getCount method and we reduce one count less when list is there, so that last entry would be ignored in dropdown.
    override fun getCount(): Int {
        val count = super.getCount()
        return if (count > 0) count - 1 else count
    }
}
your_spinner.adapter = adapter
your_spinner.setSelection(list.size-1) // We make our last list item as default entry

Редактировать для О.П. :

spinnerName?.let { spn ->
    val adapterList = list.keys.toMutableList().apply { this.add("Empty") }
    spn.adapter = object : ArrayAdapter<String>(context, R.layout.spinner_item, adapterList) {
        //Override getCount method and we reduce one count less when list is there, so that last entry would be ignored in dropdown.
        override fun getCount(): Int {
            val count = super.getCount()
            return if (count > 0) count - 1 else count
        }
    }
    spn.setSelection(adapterList.size - 1)
}
...