How to implement swipe to archive and delete functionality in a RecyclerView in Kotlin Android
How to implement swipe to archive and delete functionality in a RecyclerView in Kotlin Android.
Here's a step-by-step tutorial on how to implement swipe to archive and delete functionality in a RecyclerView in Kotlin Android:
Step 1: Set up your project
Create a new Android project in Kotlin and add the necessary dependencies in your app-level build.gradle file:
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.recyclerview:recyclerview-selection:1.1.0'
}
Step 2: Design your RecyclerView item layout
Create a layout file for your RecyclerView item (e.g., item_view.xml). This layout will represent each individual item in the RecyclerView. Customize it according to your requirements. For example, you can include a TextView for displaying item text and ImageView for displaying an icon.
Step 3: Create a RecyclerViewAdapter
Create a new Kotlin class called RecyclerViewAdapter that extends RecyclerView.Adapter. This class will be responsible for managing the data and creating the RecyclerView item views.
class RecyclerViewAdapter(private val items: List<String>) : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_view, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = items[position]
holder.textView.text = item
}
override fun getItemCount(): Int {
return items.size
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textView: TextView = itemView.findViewById(R.id.textView)
}
}
Step 4: Implement swipe functionality
Add the following code to your RecyclerViewAdapter class to enable swipe-to-archive and swipe-to-delete functionality:
class RecyclerViewAdapter(private val items: MutableList<String>) : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>(), ItemTouchHelperAdapter {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
// Same as before
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// Same as before
}
override fun getItemCount(): Int {
return items.size
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// Same as before
}
override fun onItemSwiped(position: Int, direction: Int) {
if (direction == ItemTouchHelper.LEFT) {
archiveItem(position)
} else if (direction == ItemTouchHelper.RIGHT) {
deleteItem(position)
}
}
private fun archiveItem(position: Int) {
// Implement archive logic here
// For example, remove the item from the list or update its status
items.removeAt(position)
notifyItemRemoved(position)
}
private fun deleteItem(position: Int) {
// Implement delete logic here
// For example, remove the item from the list permanently
items.removeAt(position)
notifyItemRemoved(position)
}
}
Step 5: Implement ItemTouchHelper
Create a new Kotlin class called ItemTouchHelperCallback that extends ItemTouchHelper.Callback. This class will handle the swipe gestures and notify the RecyclerViewAdapter about the swiped item.
class ItemTouchHelperCallback(private val adapter: ItemTouchHelperAdapter) : ItemTouchHelper.Callback() {
override fun isItemViewSwipeEnabled(): Boolean {
return true
}
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END // Enable both left and right swipe
return makeMovementFlags(0, swipeFlags)
}
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
adapter.onItemSwiped(viewHolder.adapterPosition, direction)
}
}
Step 6: Set up ItemTouchHelper
In your activity or fragment, create an instance of ItemTouchHelper and attach it to your RecyclerView. Also, make sure your activity or fragment implements ItemTouchHelperAdapter.
class MainActivity : AppCompatActivity(), ItemTouchHelperAdapter {
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView = findViewById(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(this)
val adapter = RecyclerViewAdapter(getItems())
recyclerView.adapter = adapter
val itemTouchHelperCallback = ItemTouchHelperCallback(adapter)
val itemTouchHelper = ItemTouchHelper(itemTouchHelperCallback)
itemTouchHelper.attachToRecyclerView(recyclerView)
}
// Implement this method if you want to pass data to the RecyclerViewAdapter
private fun getItems(): MutableList<String> {
// Return your list of items here
}
override fun onItemSwiped(position: Int, direction: Int) {
// Implement this method if you want to perform any additional actions when an item is swiped
}
}
That's it! You have successfully implemented swipe to archive and delete functionality in a RecyclerView using Kotlin in Android.