Saya dulu menggunakan pustaka SwipeToDismiss tetapi sekarang saya mencoba bermigrasi ke RecyclerView dan hal-hal tidak begitu jelas, apakah Anda tahu ada pengganti untuk lib ini? Ada ide bagaimana menerapkannya dari awal?
android
android-recyclerview
Viktor Yakunin
sumber
sumber
Jawaban:
Mulai v22.2.0, tim dukungan Android telah menyertakan
ItemTouchHelper
kelas yang membuat gesek-untuk-tutup dan seret-dan-lepas menjadi cukup sederhana. Ini mungkin tidak berfitur lengkap seperti beberapa pustaka di luar sana, tetapi berasal langsung dari tim Android.Perbarui build.gradle Anda untuk mengimpor v22.2. + Dari pustaka RecyclerView
Buat instance ItemTouchHelper dengan SimpleCallback yang sesuai
** Perhatikan bahwa SimpleCallback mengambil arah yang Anda inginkan untuk mengaktifkan drag-and-drop dan arah yang Anda inginkan untuk mengaktifkan swiping.
Lampirkan ke RecyclerView Anda
sumber
viewHolder
.Di sini, di Kode jika pengguna menggesek ke kiri maka AlertDialog ditampilkan dan jika pengguna memilih HAPUS maka item dihapus dari database dan recyclerview di-refresh dan jika pengguna memilih BATAL maka recyclerview seperti apa adanya.
sumber
if (direction == ItemTouchHelper.LEFT) // if swipe left
karenaItemTouchHelper.SimpleCallback
dibatasi hanya untuk arah gesek. Jika Anda ingin menggesek ke kiri dan kananItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)
lalu Anda perlu memeriksa arahnya.AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // stuff to put the item back } });
adapter.notifyItemChanged(position);
membawa kembali item yang digesek, bukannotifyItemRemoved
- yang lebih logis imho.mungkin Anda bisa mencoba perpustakaan ini:
https://github.com/daimajia/AndroidSwipeLayout
Pembaruan: Saya baru saja menemukan pustaka bagus lainnya yang dapat Anda gunakan dengan RecyclerView:
https://github.com/hudomju/android-swipe-to-dismiss-undo
sumber
Perpustakaan ini mungkin helpful.You dapat menerapkan
undo
diOnDissmiss
gunakansupertoast
sumber
OnTouchListener
menginspirasi oleh iniSaya menulis pustaka SwipeToDeleteRV yang mendukung fitur swipe-to-delete-undo pada tampilan recycler. Ini didasarkan pada ItemTouchHelper dan sangat mudah digunakan.
Semoga bermanfaat bagi seseorang yang menghadapi masalah yang sama.
Sebagai contoh, Anda bisa menentukan tampilan recycler Anda dalam layout XML seperti biasa, ditambah beberapa atribut opsional:
Semua atribut stdrv bersifat opsional. Jika Anda tidak menentukannya, yang default akan digunakan.
Kemudian buat adaptor yang mensubkelas STDAdapter, pastikan Anda memanggil konstruktor kelas super. Sesuatu seperti ini:
}
Selanjutnya, pastikan Anda melakukan panggilan ke
setupSwipeToDelete
metode untuk mengatur fitur geser-untuk-hapus.swipe_directions
adalah arah yang Anda izinkan untuk menggesek item.Contoh:
Itu dia! Untuk pengaturan lebih lanjut (yaitu, mengatur pesan penghapusan yang berbeda untuk item yang berbeda, menghapus item untuk sementara dan selamanya, ...) silakan merujuk ke halaman readme proyek.
sumber