Skip to main content

How to implement sticky footer in a RecyclerView in Kotlin Android

How to implement sticky footer in a RecyclerView in Kotlin Android.

Here's a step-by-step tutorial on how to implement a sticky footer in a RecyclerView in Kotlin for Android:

Step 1: Set up your project

  1. Create a new project in Android Studio and choose Kotlin as the programming language.
  2. Make sure you have the necessary dependencies added to your project. In your app-level build.gradle file, add the following dependencies:
implementation 'androidx.recyclerview:recyclerview:1.2.0'

Step 2: Create RecyclerView layout

  1. Open the XML layout file where you want to add the RecyclerView.
  2. Add a RecyclerView element to your layout file:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/footer"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
  1. Create a separate XML layout file for the footer view:
<LinearLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<!-- Add your footer views here -->

</LinearLayout>

Step 3: Create ViewHolder and Adapter

  1. Create a new Kotlin class file for your ViewHolder:
class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// Define your ViewHolder views here
}
  1. Create a new Kotlin class file for your Adapter:
class ItemAdapter(private val items: List<Item>) : RecyclerView.Adapter<ItemViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return ItemViewHolder(itemView)
}

override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
val item = items[position]
// Bind the item data to the ViewHolder views
}

override fun getItemCount(): Int {
return items.size
}
}
  1. In your activity or fragment, initialize the RecyclerView and set the adapter:
val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
val layoutManager = LinearLayoutManager(this)
recyclerView.layoutManager = layoutManager

// Assuming you have a list of items
val items = listOf<Item>(/* your items here */)

val adapter = ItemAdapter(items)
recyclerView.adapter = adapter
  1. Create a new class for the RecyclerView ItemDecoration:
class StickyFooterItemDecoration(private val footer: View) : RecyclerView.ItemDecoration() {
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
super.onDrawOver(c, parent, state)

val childCount = parent.childCount
val lastVisiblePosition = (parent.layoutManager as LinearLayoutManager).findLastVisibleItemPosition()

// Check if the last visible item is the footer
if (lastVisiblePosition == parent.adapter?.itemCount?.minus(1)) {
val lastVisibleChild = parent.getChildAt(childCount - 1)
if (lastVisibleChild.bottom >= parent.height - footer.height) {
// The footer is partially or fully visible, adjust its position
val translationY = lastVisibleChild.bottom - (parent.height - footer.height)
footer.translationY = translationY.toFloat()
}
} else {
// The footer is not visible, reset its position
footer.translationY = 0f
}
}
}
  1. Apply the StickyFooterItemDecoration to your RecyclerView:
val footer: View = findViewById(R.id.footer)
val itemDecoration = StickyFooterItemDecoration(footer)
recyclerView.addItemDecoration(itemDecoration)

That's it! You have now implemented a sticky footer in a RecyclerView in Kotlin for Android. The footer will stick to the bottom of the screen and adjust its position based on the visibility of the last item in the RecyclerView.