Jetpackの作成:リストのドラッグアンドドロップの並び替え
2931 ワード
私は私が働いているだけで、Jetpackのcomposeを使用してすべての私のAndroidアプリを再書き込みを停止したいと思います.書き込み時に、これはすべてのアプリケーションのための最良の決定ではない可能性があります.
ご存知のように、構成は確かに安定した形です(つまり、パフォーマンスは素晴らしいですし、APIは変更されません)が、他の期待するが、まだ実装されていないいくつかの機能があります.
私のアプリの1つを移植しながら、私はそのような機能につまずいた:ドラッグアンドドロップの順序を変更します.
があるactive feature request そしてdrag-and-drop support in the roadmap しかし、現時点では公式の回避策はない.クイック検索機能のいくつかの手動実装を明らかにする.しかし、私の意見では、現時点で最も良い回避策はComposeReorderable library すべての実装の詳細を抽象化しながら機能を実装します.
ドラッグアンドドロップ効果は完璧ではないかもしれないが、それは公式の解決策があるまで仕事を取得します.これを達成するために、迅速なコード断片を見てみましょう.
val state = rememberReorderState() // 1.
val tasks by viewModel.getTasks().observeAsState(listOf())
LazyColumn(
state = state.listState,
modifier = Modifier
.reorderable(state, { fromPos, toPos -> // 2.
viewModel.onTaskReordered(tasks, fromPos, toPos)
})
.detectReorderAfterLongPress(state) // 3.
) {
items(tasks, key = { task -> task.id }) { task ->
Text(
task.text,
Modifier
.draggedItem(state.offsetByKey(task.id)) // 4.
)
}
}
build.gradle
覚えておいてくださいlatest version ) : implementation("org.burnoutcrew.composereorderable:reorderable:0.7.0")
state
通常の怠惰リストではリストのスクロール位置を保持しています.ライブラリは、ドラッグアンドドロップの再注文を実行するための独自の状態を必要とします.reorderable
リスト内の2つの項目がドラッグ中に場所を変更すると、何が起こるかを指定します.私たちのケースでは、一方向のアーキテクチャに従って、内部状態を更新し、その後ビューを更新する変更について通知されます.detectReorderAfterLongPress
修飾子は、リスト全体または特定のリスト項目のいずれかで宣言できます.リストの上で宣言されるならば、すべてのアイテムは償還できます.特定の項目で宣言されるならば、それらだけは償還できます(彼らの残りは動かない).ハッピーコーディング!
Reference
この問題について(Jetpackの作成:リストのドラッグアンドドロップの並び替え), 我々は、より多くの情報をここで見つけました https://dev.to/rockandnull/jetpack-compose-drag-and-drop-reorder-for-lists-13jiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol