How to implement swipe to dismiss functionality in a RecyclerView in Kotlin Android
How to implement swipe to dismiss functionality in a RecyclerView in Kotlin Android.
Here's a step-by-step tutorial on how to implement swipe to dismiss functionality in a RecyclerView in Kotlin Android:
Step 1: Set up your project
- Create a new Android project in Kotlin.
- Add the necessary dependencies in your app-level build.gradle file:
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.cardview:cardview:1.0.0'
}
Step 2: Create RecyclerView layout
- Open your activity_main.xml layout file.
- Add a RecyclerView element inside a parent layout:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Step 3: Create RecyclerView item layout
- Create a new XML layout file named item_list.xml.
- Design the layout for your RecyclerView items. For example:
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" />
</androidx.cardview.widget.CardView>
Step 4: Create RecyclerView Adapter
- Create a new Kotlin class named RecyclerViewAdapter.
- Extend RecyclerView.Adapter and implement the necessary methods.
- Use the ViewHolder pattern to optimize performance:
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_list, 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 5: Implement swipe to dismiss functionality
- Inside your MainActivity, initialize the RecyclerView and set its adapter:
class MainActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
private lateinit var adapter: RecyclerViewAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView = findViewById(R.id.recyclerView)
adapter = RecyclerViewAdapter(getItems())
recyclerView.adapter = adapter
val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
) {
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val position = viewHolder.adapterPosition
adapter.removeItem(position)
}
})
itemTouchHelper.attachToRecyclerView(recyclerView)
}
private fun getItems(): List<String> {
return listOf("Item 1", "Item 2", "Item 3", "Item 4", "Item 5")
}
}
Step 6: Handle swipe gestures
- In the above code, we use ItemTouchHelper to handle swipe gestures.
- We specify the directions in which the items can be swiped (e.g., left or right).
- In the onSwiped method, we remove the swiped item from the adapter by calling removeItem(position) method.
Step 7: Add removeItem method to RecyclerViewAdapter
- Inside the RecyclerViewAdapter class, add a removeItem method to remove an item from the list and notify the adapter:
fun removeItem(position: Int) {
items.toMutableList().removeAt(position)
notifyItemRemoved(position)
}
That's it! You have successfully implemented swipe to dismiss functionality in a RecyclerView using Kotlin Android. Now, when you swipe an item left or right, it will be removed from the list.