Ziehen und Drop in ComposeAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Ziehen und Drop in Compose

Post by Anonymous »

Ich habe ein Problem mit dem Drag-and-Drop-Verhalten in Jetpack Compose. Ich verwende Lazyverticalgrid als Drop -Ziel. Wenn ich versuche, ein Element zu ziehen und es in dieses Raster zu verschieben, möchte ich: < /p>
das Element vorübergehend in die Liste hinzufügen, wenn es sich in der Zielzone befindet (als visuelles Schnappschuss). Ich erhalte den eingegebenen Rückruf korrekt, wenn das Element in das Ziel gezogen wird. Ich erhalte jedoch nicht die einxitierten oder angegebenen Rückrufe, wenn das Element herausgezogen wird oder die Geste endet. Es ist unmöglich zu erkennen, wann das Element die Zone verlässt oder der Luftwiderstand abgebrochen wird.

Code: Select all

                    LazyVerticalGrid(
columns = GridCells.Fixed(3),
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
items(inActiveGrips) { item ->
val jsonGrip = remember(item) { Gson().toJson(item) }
if (item.gripItemType == GripItemType.NONE) {
Box(
modifier = Modifier
.fillMaxWidth()
.dragAndDropTarget(
shouldStartDragAndDrop = { event ->
val androidEvent = event.toAndroidDragEvent()
val label = androidEvent.clipDescription.label
label == activeGripLabel
},
target = object : DragAndDropTarget {
override fun onStarted(event: DragAndDropEvent) {
super.onStarted(event)
wasDropped = false
}

override fun onDrop(event: DragAndDropEvent): Boolean {
wasDropped = true
val dragEvent = event.toAndroidDragEvent()
val intent =
dragEvent.clipData.getItemAt(0).intent
val json =
intent?.getStringExtra(activeGripTransferData)
?: return false
val movedGrip = Gson().fromJson(
json,
GripItemData::class.java
)
moveActiveToInActiveCallback(movedGrip.id)

return true
}

override fun onEntered(event: DragAndDropEvent) {
super.onEntered(event)
onMovedCallback.invoke(true)
}

override fun onExited(event: DragAndDropEvent) {
super.onExited(event)
onMovedCallback.invoke(false)
}

override fun onEnded(event: DragAndDropEvent) {
super.onEnded(event)
}
}
),
contentAlignment = Alignment.Center
) {
Box(
modifier = Modifier
.padding(top = 32.dp)
.size(12.dp)
.background(
Color.LightGray.copy(alpha = 0.4f),
shape = CircleShape
)
)
}
} else {
//some list item, doesn't matter
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post