Добавляется только один элемент в список через адаптер
есть переопределенный ArrayAdapter:
private class ContainerAdapter(ctx: Context) : ArrayAdapter<Container>(ctx, android.R.layout.simple_list_item_2, containerList){
override fun getView(position: Int, ConvertView: View?, parent: ViewGroup): View {
var convertView = ConvertView
val container: Container? = getItem(position)
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_2, null)
}
(convertView!!.findViewById<View>(android.R.id.text1) as TextView).text = container!!.RubbishType
(convertView.findViewById<View>(android.R.id.text2) as TextView).text = container.Volume.toString()
return convertView
}
}
Кнопка:
btnAddContainer.setOnClickListener {
val container = Container(txtTipMusora.text.toString(), txtObjemKonteinerov.text.toString().toDouble())
containerList.add(container)
val adapter = ContainerAdapter(this)
containerListView.adapter = adapter
}
По нажатию кнопки почему-то добавляется только один элемент в список. Почему?
класс Container:
class Container(rubbishType:String = "", volume:Double = 0.0){
val RubbishType = rubbishType
val Volume = volume
}
Ответы (1 шт):
Автор решения: Vlad Orlinskas
→ Ссылка
Вы каждый раз по нажатию кнопки создаете новый адаптер с одним элементом. Попробуйте инициализировать адаптер выше чем btnAddContainer.setOnClickListener
Или сделайте вот так :
containerList = mutableListOf<Container>
btnAddContainer.setOnClickListener {
val container = Container(txtTipMusora.text.toString(),
txtObjemKonteinerov.text.toString().toDouble())
containerList.add(container)
containerListView.adapter = ContainerAdapter(this, containerList)
}
Как видите, нужно сначала добавить элемент в ваш список, а затем его предоставить адаптеру. Вообще с динамическими списками лучше использовать адаптеры, которые поддерживают notifyItemsChange() подобные методы. (почитайте)