Как реализовать переупорядоченный список с областью перетаскивания в Android Compose?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как реализовать переупорядоченный список с областью перетаскивания в Android Compose?

Сообщение Anonymous »

Я строю функцию в приложении, используя JetPack Compose, где я хочу отобразить сетку элементов, которые пользователи могут переупорядочить, перетаскивая. В дополнение к повторному заказу я хотел бы позволить пользователям перетаскивать элемент за пределами сетки в определенную область, чтобы удалить его, аналогично тому, как некоторые приложения пускового средства позволяют вам перетаскивать значки в зону мусора. Библиотеки переупорядочивания: org.burnoutcrew.composereordoreable и sh.calvin.reorderable.

Код: Выделить всё

data class GridItem(val id: Int, val text: String)

@Composable
fun ReorderableGridViewScreen(modifier: Modifier = Modifier) {
var items by remember { mutableStateOf(List(10) { GridItem(it,"Item $it") }) }

val lazyGridState = rememberLazyGridState()
val reorderableLazyGridState = rememberReorderableLazyGridState(lazyGridState) { from, to ->
items = items.toMutableList().apply {
add(to.index, removeAt(from.index))
}
}

Column(
modifier = modifier
.fillMaxSize()
.background(Color.LightGray)
.padding(16.dp)
) {
Text(
text = "Reorderable Grid View",
style = MaterialTheme.typography.headlineLarge,
modifier = Modifier.padding(bottom = 16.dp)
)

LazyVerticalGrid(
columns = GridCells.Fixed(2), // 2 columns
state = lazyGridState,
modifier = Modifier.fillMaxSize(),
contentPadding = PaddingValues(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp),
) {
items(items, key = { it.id }) { item ->
ReorderableItem(reorderableLazyGridState, key = item.id) { isDragging ->

val elevation by animateDpAsState(if (isDragging) 4.dp else 0.dp)

Surface(shadowElevation = elevation) {
Box(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
.padding(8.dp),
contentAlignment = Alignment.Center
) {
Text(text = item.text, style = MaterialTheme.typography.bodyMedium)
IconButton(
onClick = {},
modifier = Modifier
.align(Alignment.BottomEnd)
.draggableHandle()
) {
Icon(Icons.Default.Favorite, contentDescription = null)
}
}
}
}
}
}
}
}
< /code>
Я также попробовал метод из перетаскивания и отброса в Compose CodeLab, но его больше передачи данных между одним элементом в другой. Что я не пытаюсь архивировать. 
Есть ли какое-либо готовое решение, которое мне не хватает, или я должен реализовать эту функцию с помощью modifier.offset () 
?

Подробнее здесь: https://stackoverflow.com/questions/796 ... id-compose
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»