Как деактивировать предыдущую нажатую ToggleButton?

Рейтинг: 0Ответов: 1Опубликовано: 27.02.2023

У меня есть 5 ToggleButton, которые фильтруют отображаемые метки на карте по id(filterValues). Суть такая, если нажать на кнопку которая выводит 17 объектов, она выведет 17 объектов, если нажать другую кнопку которая выводит 5 объектов, выведутся 5 объектов, но прошлая нажатая кнопка останется активированной(хоть и никак не влияет на вывод меток). Так вот, как исправить данное поведение? Чтобы ToggleButton работали как будто RadioButton в группе, то есть только одна кнопка может быть активирована из всех. RadioButton не подходит под мою задачу, так как мне нужно чтобы можно было выключить все кнопки обратно. Я пробовал хранить прошлую нажатую кнопку и выключать её когда включается другая, но тогда метки не правильно отображались (если надо, то приложу код с этим вариантом)

Вот код, filters это список инициализированных кнопок:

val filters = listOf(filter1, filter2, filter3, filter4, filter5)
val filterValues =
    mapOf(filter1 to 4L, filter2 to 2L, filter3 to 1L, filter4 to 5L, filter5 to 6L)


filters.forEach { filter ->
    filter.setOnCheckedChangeListener { _, isChecked ->
        clusterizedCollection.clear()
        visibleIds.clear()
        if (isChecked) {
            visibleIds.add(filterValues[filter]!!)
        } else {
            visibleIds.addAll(listOf(1L, 2L, 4L, 5L, 6L))
        }
        updateMarkers()
    }
}

UPD: Как уже было сказано, пробовал хранить предыдущую нажатую кнопку (lastChecked) и отключать её, пробовал много способов, но примерно суть была везде одна В данном коде проблема в том, что если активировать новую кнопку, то прошлая кнопка деактивируется, но метки выведутся неправильно (их отображается в два раза больше)

filters.forEach { filter ->
    filter.setOnCheckedChangeListener { _, isChecked ->
        if (isChecked) {
            if (lastCheckedFilter != null && lastCheckedFilter != filter) {
                lastCheckedFilter?.isChecked = false
            }
            lastCheckedFilter = filter
            visibleIds.clear()
            visibleIds.add(filterValues[filter]!!)
        } else {
            visibleIds.addAll(listOf(1L, 2L, 4L, 5L, 6L))

        }
        clusterizedCollection.clear()
        updateMarkers()
    }
}

Ответы

▲ 0

Заменить .setOnCheckedChangeListener на .setOnClickListener