Skip to content

7shifts/SideHeaderDecorator

Repository files navigation

SideHeaderDecorator

This library offers a simple way to add sticky side headers to RecyclerViews. Without touching your list adapter, headers will scroll in with the first item in a group, stick to the top of the list, then scroll out with the last item in a group.

Add me to your project!

implementation 'com.github.7shifts:SideHeaderDecorator:0.2.0'

Usage

Using SideHeaderDecorator requires only two steps. First, use the HeaderProvider interface to map items to header data. Sequential items mapping to the same header data are considered a group. For example, consider a list of name Strings where the headers' data is a name's first initial.

val headerProvider = object : SideHeaderDecorator.HeaderProvider<Char> {
  override fun getHeader(position: Int): Char {
    return names[position].first()
  }
}

Second, given your header data from HeaderProvider::getHeader, implement SideHeaderDecorator's single abstract method to create header views. Pass your HeaderProvider to SideHeaderDecorator's constructor. For example, given the first initial of a name, return an inflated header view.

val headerDecorator = object : SideHeaderDecorator<Char>(headerProvider) {
  override fun getHeaderView(header: Char, parent: RecyclerView): View {
    val textView = LayoutInflater.from(parent.context).inflate(R.layout.header_view, parent, false) as TextView
    textView.text = header.toString()
    return textView
  }
}

That's it! Apply the decorator to your RecyclerView and get sticky side headers!

names_recycler_view.addItemDecoration(headerDecorator)

Additional Notes

List Item Padding

  • To make room for the header view, SideHeaderDecorator steals the left padding from your list item views.

Header Placement

  • The header view is placed (at first) in the top-left corner of your list item view. The header view retains its own padding.

Header padding and placement

License

Copyright (c) 2019 7shifts

SideHeaderDecorator is licensed under the MIT License.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published