Добро пожаловать в 4. сообщение о моем путешествии по преобразованию приложения Java Swing в Compose для рабочего стола. Сегодня я сосредоточусь на множественном выборе в списке. Когда TKDupeFinder обнаруживает, скажем, 10 файлов с одинаковым хэшем MD5, их содержимое, скорее всего, одно и то же. Следовательно, 9 из них являются кандидатами на удаление. Приложение предоставит две кнопки, Показать и Удалить , который, ну, покажет или удалит файлы, которые были выбраны в списке. Давайте посмотрим, как мы мочь
- создайте прокручиваемый список
- и разрешить множественный выбор
Чтобы утолить ваш аппетит, вот как все будет выглядеть:
И вот появляется код, который творит волшебство.
@Composable fun ThirdRow(currentPos: Int, checksums: List, selected: SnapshotStateMap ) { val items = if (checksums.isNotEmpty()) df.getFiles(checksums[currentPos]) else emptyList() LazyColumnForIndexed(items, modifier = Modifier.fillMaxSize().padding(8.dp), itemContent = { index, item -> val current = selected[index] ?: false ListItem(secondaryText = { Text(item.parent) }, modifier = Modifier.toggleable(onValueChange = { selected[index] = !current }, value = current) .background(if (current) Color.LightGray else Color.Transparent), text = { Text(item.name) }) }) }
Ленивый столбец Для Indexed()
предоставляет список. Содержимое, которое будет отображаться, уже есть. currentPos
определяет контрольную сумму, файлы которой должны быть представлены. Итак, с помощью df.GetFiles(контрольные суммы[currentPos])
Когда необходимо создать новый элемент списка, вызывается содержимое элемента
. Он получает индекс и элемент. Я использую индекс, чтобы отслеживать, выбран ли элемент в данный момент. Эта карта передается в мой composable ( SnapshotStateMap Boolean>
), потому что ее тоже нужно изменить где-то в другом месте. Boolean>
ListItem
s можно настроить так, чтобы он содержал несколько строк текста и значок. Самое главное, вы можете использовать его модификатор
, чтобы сделать его переключаемым
. Если это произойдет, вызывается onValueChange
. Как вы можете видеть, мне просто нужно перевернуть Логическое значение
. В зависимости от текущего значения мой элемент имеет либо прозрачный, либо светло-серый фон.
Как вы можете видеть, с помощью всего нескольких строк кода вы получаете красивый прокручиваемый список с множественным выбором. Вам нужно было реализовать несколько списков выбора в Compose? Как вы это реализовали? Пожалуйста, поделитесь своим решением в комментариях, я хотел бы их услышать.
Из Swing в Jetpack Создайте рабочий стол #1 Из Swing в Jetpack Создайте рабочий стол #2 Из Swing в Compose Desktop # 3
Оригинал: “https://dev.to/tkuenneth/from-swing-to-compose-desktop-4-35c1”