Saya memiliki daftar catatan dalam tampilan daftar yang saya ingin pengguna dapat mengurutkan ulang menggunakan metode drag and drop. Saya telah melihat ini diterapkan di aplikasi lain, tetapi saya belum menemukan tutorial untuk itu. Itu pasti sesuatu yang dibutuhkan orang lain juga. Adakah yang bisa mengarahkan saya ke beberapa kode untuk melakukan ini?
132
Jawaban:
Saya telah mengerjakan ini selama beberapa waktu sekarang. Sulit untuk mendapatkan yang benar, dan saya tidak mengklaim saya lakukan, tapi saya senang dengan itu sejauh ini. Kode saya dan beberapa demo dapat ditemukan di
Penggunaannya sangat mirip dengan TouchInterceptor (yang menjadi basis kode), meskipun perubahan implementasi yang signifikan telah dibuat.
DragSortListView memiliki pengguliran yang halus dan dapat diprediksi sambil menyeret dan mengacak item. Mengocok item jauh lebih konsisten dengan posisi item menyeret / mengambang. Item daftar tinggi-heterogen didukung. Pengguliran seret dapat disesuaikan (saya mendemonstrasikan pengguliran seret cepat melalui daftar panjang --- bukan berarti suatu aplikasi masuk dalam pikiran). Header / Footer dihormati. dll ?? Lihatlah.
sumber
Sekarang cukup mudah untuk diterapkan
RecyclerView
dengan ItemTouchHelper . Cukup timpaonMove
metode dariItemTouchHelper.Callback
:Tutorial yang cukup bagus tentang ini dapat ditemukan di medium.com: Seret dan Gesek dengan RecyclerView
sumber
Saya menambahkan jawaban ini untuk keperluan mereka yang mencari tahu tentang ini ..
Ada sebuah episode DevBytes ( ListView Cell Dragging dan Mengatur Ulang ) baru-baru ini yang menjelaskan bagaimana melakukan ini
Anda dapat menemukannya di sini juga kode sampel tersedia di sini .
Apa yang pada dasarnya dilakukan oleh kode ini adalah kode itu dibuat
dynamic listview
dengan ekstensilistview
yang mendukung seret dan swapping sel. Sehingga Anda dapat menggunakanDynamicListView
bukan dasar AndaListView
dan hanya itu Anda telah menerapkan ListView dengan Drag dan Drop.sumber
Lib DragListView melakukan ini dengan sangat rapi dengan dukungan yang sangat bagus untuk animasi khusus seperti animasi elevasi. Itu juga masih dipertahankan dan diperbarui secara teratur.
Inilah cara Anda menggunakannya:
1: Tambahkan Lib untuk gradle pertama
2: Tambahkan daftar dari xml
3: Atur pendengar seret
4: Buat adaptor yang diganti dari DragItemAdapter
5: Menerapkan viewholder yang memanjang dari DragItemAdapter.ViewHolder
Untuk info lebih rinci, kunjungi https://github.com/woxblom/DragListView
sumber
Saya menemukan DragSortListView bekerja dengan baik, meskipun memulainya bisa lebih mudah. Berikut tutorial singkat tentang cara menggunakannya di Android Studio dengan daftar dalam memori:
Tambahkan ini ke
build.gradle
dependensi untuk aplikasi Anda:Buat sumber daya untuk drag handle ID dengan membuat atau menambahkan ke
values/ids.xml
:Buat tata letak untuk item daftar yang menyertakan gambar pegangan seret favorit Anda, dan berikan ID-nya ke ID yang Anda buat pada langkah 2 (mis
drag_handle
.).Buat tata letak DragSortListView, sesuatu seperti ini:
Tetapkan
ArrayAdapter
turunan dengangetView
penggantian yang membuat tampilan item daftar Anda.Tetapkan pendengar jatuh yang mengatur ulang item saat dijatuhkan.
sumber
Saya baru-baru ini menemukan inti besar ini yang memberikan implementasi yang baik dari jenis drag
ListView
, tanpa ketergantungan eksternal diperlukan.Pada dasarnya ini terdiri dari menciptakan Adaptor kustom Anda yang diperluas
ArrayAdapter
sebagai kelas dalam untuk aktivitas yang berisi AndaListView
. Pada adaptor ini, satu setonTouchListener
ke Item Daftar Anda yang akan menandakan awal dari hambatan.Dalam Gist itu mereka mengatur pendengar ke bagian tertentu dari tata letak Item Daftar ("pegangan" item), jadi orang tidak sengaja memindahkannya dengan menekan bagian mana pun darinya. Secara pribadi, saya lebih memilih untuk pergi dengan
onLongClickListener
gantinya, tetapi itu terserah Anda untuk memutuskan. Berikut kutipan dari bagian itu:Ini juga melibatkan penambahan
onTouchListener
keListView
, yang memeriksa apakah suatu item diseret, menangani pertukaran dan pembatalan, dan menghentikan status seret. Kutipan dari bagian itu:Akhirnya, berikut adalah bagaimana
stopDrag
danstartDrag
metode yang terlihat, yang menangani mengaktifkan dan menonaktifkan proses seret:sumber