Skip to main content

How to implement swipe gestures in a ListView in Kotlin Android

How to implement swipe gestures in a ListView in Kotlin Android.

Here's a step-by-step tutorial on how to implement swipe gestures in a ListView in Kotlin Android.

Step 1: Set up the project

  • Create a new project in Android Studio.
  • Set the minimum SDK version to at least 15 in the app's build.gradle file.

Step 2: Add necessary dependencies

  • In the project's build.gradle file, add the following dependency:
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.2.1'
}

Step 3: Create a layout for the ListView item

  • Create a new XML layout file for the ListView item (e.g., list_item.xml).
  • Design the layout as per your requirements. For example, you can add a TextView to display the item's text.

Step 4: Create a custom Adapter for the ListView

  • Create a new Kotlin class for the custom Adapter (e.g., CustomAdapter.kt).
  • Extend the ArrayAdapter class and override the getView() method.
  • In the getView() method, inflate the list_item.xml layout and populate it with the appropriate data.
  • Here's an example implementation:
class CustomAdapter(context: Context, private val items: List<String>) : ArrayAdapter<String>(context, 0, items) {

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var view = convertView
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false)
}
val textView = view!!.findViewById<TextView>(R.id.textView)
textView.text = items[position]
return view
}
}

Step 5: Implement swipe gestures

  • Open the activity layout file where the ListView is present (e.g., activity_main.xml).
  • Add a RecyclerView widget to the layout instead of the ListView.
  • Set the RecyclerView's layout manager to LinearLayoutManager.
  • Here's an example implementation:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
/>

Step 6: Initialize the RecyclerView and set the Adapter

  • Open the activity class file (e.g., MainActivity.kt).
  • Declare a RecyclerView and Adapter variable at the top of the class.
  • Initialize the RecyclerView and set its Adapter in the onCreate() method.
  • Here's an example implementation:
class MainActivity : AppCompatActivity() {

private lateinit var recyclerView: RecyclerView
private lateinit var adapter: CustomAdapter

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

recyclerView = findViewById(R.id.recyclerView)
adapter = CustomAdapter(this, listOf("Item 1", "Item 2", "Item 3"))

recyclerView.adapter = adapter
}
}

Step 7: Implement swipe gesture functionality

  • Create a new Kotlin class for the swipe gesture implementation (e.g., SwipeGestureListener.kt).
  • Extend the ItemTouchHelper.SimpleCallback class and override the onMove() and onSwiped() methods.
  • In the onSwiped() method, remove the swiped item from the Adapter's data list and notify the Adapter of the change.
  • Here's an example implementation:
class SwipeGestureListener(private val adapter: CustomAdapter) : 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)
}
}

Step 8: Attach the swipe gesture listener to the RecyclerView

  • In the onCreate() method of the activity class, create an instance of the SwipeGestureListener.
  • Create an instance of ItemTouchHelper and pass the SwipeGestureListener to it.
  • Attach the ItemTouchHelper to the RecyclerView using the attachToRecyclerView() method.
  • Here's an example implementation:
class MainActivity : AppCompatActivity() {

// ...

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// ...

val swipeGestureListener = SwipeGestureListener(adapter)
val itemTouchHelper = ItemTouchHelper(swipeGestureListener)
itemTouchHelper.attachToRecyclerView(recyclerView)
}
}

That's it! You have successfully implemented swipe gestures in a ListView (RecyclerView) in Kotlin Android.