• Stars
    star
    501
  • Rank 88,002 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 9 years ago
  • Updated almost 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

HeaderRecyclerView is an Android library created to be able to use RecyclerView.Adapter with a header in a easy way. To use this library create your RecyclerView.Adapter classes extending from HeaderRecyclerViewAdapter.

Karumi logo HeaderRecyclerView Build Status Maven Central Android Arsenal

HeaderRecyclerView is an Android library created to be able to use RecyclerView.Adapter with a header and/or footer in a easy way. To use this library create your RecyclerView.Adapter classes extending from HeaderRecyclerViewAdapter.

Screenshots

Demo Screenshot

Usage

To use HeaderRecyclerView in your application you have to follow this steps:

  • 1 - Create a class extending from HeaderRecyclerViewAdapter:
public class DragonBallAdapter extends HeaderRecyclerViewAdapter<RecyclerView.ViewHolder, DragonBallHeader, DragonBallCharacter, DragonBallFooter> {
  • 2 - Implement onCreateHeaderViewHolder, onCreateItemViewHolder,onCreateFooterViewHolder , onBindHeaderViewHolder, onBindItemViewHOlder and onBindFooterViewHolder to create your RecyclerView.ViewHolder instances and draw your rows:

If you don't use header or footer, you can ignore overriding corresponding createViewHolder and bindViewHolder method

@Override
  protected RecyclerView.ViewHolder onCreateHeaderViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = getLayoutInflater(parent);
    View headerView = inflater.inflate(R.layout.row_dragon_ball_header, parent, false);
    return new HeaderViewHolder(headerView);
  }

  @Override
  protected RecyclerView.ViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = getLayoutInflater(parent);
    View characterView = inflater.inflate(R.layout.row_dragon_ball_character, parent, false);
    return new CharacterViewHolder(characterView);
  }

  @Override
  protected RecyclerView.ViewHolder onCreateFooterViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = getLayoutInflater(parent);
    View footerView = inflater.inflate(R.layout.row_dragon_ball_footer, parent, false);
    return new FooterViewHolder(footerView);
  }

  @Override protected void onBindHeaderViewHolder(RecyclerView.ViewHolder holder, int position) {
    DragonBallHeader header = getHeader();
    HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder;
    headerViewHolder.render(header);
  }

  @Override protected void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) {
    DragonBallCharacter character = getItem(position);
    CharacterViewHolder characterViewHolder = (CharacterViewHolder) holder;
    characterViewHolder.render(character);
  }

  @Override protected void onBindFooterViewHolder(RecyclerView.ViewHolder holder, int position) {
    DragonBallFooter footer = getFooter();
    FooterViewHolder footerViewHolder = (FooterViewHolder) holder;
    footerViewHolder.render(footer);
  }
  • 3 - Configure your RecyclerView widget with this layout:
  List<DragonBallCharacter> characters = getDragonBallCharacters();
  DragonBallHeader header = getHeader(characters);
  DragonBallFooter footer = getFooter();
  adapter.setHeader(header);
  adapter.setFooter(footer);
  adapter.setItems(characters);
  recyclerView.setAdapter(adapter);
  • 4 - If you are using a GridLayoutManager instead of a LinearLayoutManager remember you'll have to configure the SpanSizeLookup used in the LayoutManager instance. If you are using HeaderRecyclerView with a GridLayoutManager you can create an instance of HeaderSpanSizeLookup and configure your LayoutManager instance:
  GridLayoutManager layoutManager = new GridLayoutManager(this, NUMBER_OF_COLUMNS);
  HeaderSpanSizeLookup headerSpanSizeLookup = new HeaderSpanSizeLookup(adapter, layoutManager);
  layoutManager.setSpanSizeLookup(headerSpanSizeLookup);
  • 5 - You can use following method to handle view life cycle event:
    @Override
    protected void onHeaderViewRecycled(VH holder) {
    }

    @Override
    protected void onItemViewRecycled(VH holder) {
    }

    @Override
    protected void onFooterViewRecycled(VH holder) {
    }

Add it to your project

Add HeaderRecyclerView dependency to your build.gradle file

dependencies{
    compile 'com.karumi:headerrecyclerview:1.1.0'
}

or to your pom.xml if you are using Maven instead of Gradle

<dependency>
    <groupId>com.karumi</groupId>
    <artifactId>headerrecyclerview</artifactId>
    <version>1.1.0</version>
    <type>aar</type>
</dependency>

Do you want to contribute?

Please, do it! We'd like to improve this library with your help :)

Libraries used in this project

  • [Robolectric] 2
  • [JUnit] 3
  • [Picasso] 4
  • [Nox] 5
  • [Mockito] 6
  • [Powermock] 7

External resources used in this project

  • FUNimation Productions, Ltd. ©

License

Copyright 2015 Karumi

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

Dexter

Android library that simplifies the process of requesting permissions at runtime.
Java
5,233
star
2

Rosie

Rosie is an Android framework to create applications following the principles of Clean Architecture.
Java
1,824
star
3

ExpandableSelector

ExpandableSelector is an Android library created to show a list of Button/ImageButton widgets inside a animated container which can be collapsed or expanded.
Java
693
star
4

KataSuperHeroesAndroid

Super Heroes Kata for Android Developers. The main goal is to practice UI Testing.
Java
683
star
5

Dividers

Dividers is a simple Android library to create easy separators for your RecyclerViews
Java
483
star
6

AndroidAudit

Your Android app as a crime scene!!!
468
star
7

BothamUI

Model View Presenter Framework written in Swift.
Swift
347
star
8

KataScreenshotAndroid

Screenshot Kata for Android Developers. The main goal is to practice UI Testing.
Java
265
star
9

KataContactsJava

KataContacts written in Java. The main goal is to practice Clean Architecture Development.
Java
111
star
10

project-quality-assurance

Define a general guidance for tech projects quality assurance at Karumi.
102
star
11

KataSuperHeroesKotlin

Super Heroes Kata for Android Developers in Kotlin. The main goal is to practice UI Testing.
Kotlin
86
star
12

KataScreenshotKotlin

Screenshot Kata for Android Developers with Kotlin. The main goal is to practice UI Screenshot Testing.
Kotlin
76
star
13

KataSuperHeroesIOS

Super heroes kata for iOS Developers. The main goal is to practice UI Testing.
Swift
69
star
14

learnyougit

A self-guided workshop to learn the basics and some of the internals of Git
JavaScript
67
star
15

MarvelApiClientAndroid

Api client for Marvel Api
Java
66
star
16

MaxibonKataJava

Maxibon kata for Java Developers. The main goal is to practice property based testing.
Java
65
star
17

KataTODOApiClientKotlin

TODO API Client Kata for Kotlin Developers. The main goal is to practice integration testing using MockWebServer
Kotlin
60
star
18

KataContactsSwift

KataContacts written in Swift. The main goal is to practice Clean Architecture Development.
Swift
60
star
19

KataTODOApiClientJava

TODO API Client Kata for Java Developers. The main goal is to practice integration testing using MockWebServer.
Java
53
star
20

play-framework-kotlin

This repository is to show how to create an Play Framework project using Kotlin
Kotlin
48
star
21

KataContactsKotlin

KataContacts written in Kotlin. The main goal is to practice Clean Architecture Development
Kotlin
48
star
22

Hagu

Gradle plugin to enable Kotlin build configuration secrets for Kotlin, Kotlin-Native / Multiplatform.
Kotlin
47
star
23

KataSuperHeroesJetpack

SuperHeroes kata for Jetpack Developers in Kotlin
Kotlin
47
star
24

WeakDelegate

WeakReference property delegate proposal
Kotlin
47
star
25

KotlinMultiplatformApp

Application example using Kotlin multiplatform
Objective-C
43
star
26

MaxibonKataKotlin

Maxibon kata for Kotlin Developers. The main goal is to practice property based testing.
Kotlin
43
star
27

SuperHeroesKotlin

An example of architecture in kotlin
Kotlin
41
star
28

Reddo

Show messages in a 16x32 led matrix using a Raspberry Pi.
Java
39
star
29

SpringBootKotlin

Spring boot Kotlin example
Kotlin
38
star
30

BothamNetworking

Networking Framework written in Swift.
Swift
26
star
31

MaxibonKataIOS

Maxibon kata for iOS Developers. The main goal is to practice property based testing.
Swift
26
star
32

ControlFlowUI

A library that add control flow functionality to SwitUI, using the power of @functionBuilder and ViewBuilder.
Swift
25
star
33

AndroidAnimations

This is the project where we will analyze study and put into practice how to work with animations in Android
Kotlin
22
star
34

KataTODOApiClientIOS

TODO API Client Kata for iOS Developers. The main goal is to practice integration testing using Nocilla and Nimble.
Swift
21
star
35

FoursquareTop

Code for the app made as part of the NSSpain 2016 talk
Swift
21
star
36

KataSuperHeroesCompose

Super Heroes Kata implemented using Jetpack Compose and Screenshot Testing.
Kotlin
19
star
37

iOSBasicTraining

Code associated to the first level of our iOS Training.
Swift
17
star
38

KataCoroutines

Transform this game-of-life sequential implementation to a parallel version with Kotlin coroutines
Kotlin
16
star
39

ReactNativePlayground

Playground used to learn and experiment with React Native 🚀
TypeScript
16
star
40

KataScreenshotIOS

Screenshot Kata for iOS Developers. The main goal is to practice UI Testing
Swift
16
star
41

KataLogInLogOutKotlin

Solution for the testing kata imparted during the mobile testing training written in Kotlin
Kotlin
15
star
42

MarvelApiClient

Marvel Api Client written in Swift.
Swift
14
star
43

ktlint-sbt

Ktlint Sbt Plugin
Scala
13
star
44

kodein-sample-testing

This repository aims to be a small example of how to use Kodein to provide different implementations for production code and testing code
Kotlin
11
star
45

KataSuperHeroesSpringBoot

This is a spring boot kata for the courses.
Kotlin
10
star
46

EndZone

Swift
10
star
47

hangout-slack-import

Script that help you import your google hangout chat history to Slack
Python
9
star
48

MagicCounterKataAndroid

Magic counter kata for Android developers. The main goal is to unit and integration testing.
Kotlin
9
star
49

KataSuperHeroesReactNative

Super Heroes Kata for React Native Developers in Typescript.
TypeScript
8
star
50

HotSwitchLocalizationTest

Android app implemented to show how to change the language and country used by our apps in runtime without restarting thea app. This only works for API >= 17. For API < 17 the localization change is not applied.
Kotlin
6
star
51

boilerplate-wars

Swift
6
star
52

TestingPlayFramework

Example repository used to show how to test a Play Framework application
Scala
4
star
53

KataContactsCSharp

C#
4
star
54

KataLogInLogOutSwift

Solution for the testing kata imparted during the mobile testing training written in Swift
Swift
4
star
55

LitElementPlayground

Playground used to learn and experiment with Lit Element and Web development
JavaScript
3
star
56

BasicTextFieldKeyboardBug

Repository used to show how to reproduce a bug we've found in BasicTextField component.
Kotlin
3
star
57

ExtensionProtocolforStruct

Swift
3
star
58

infrared-wifi-bridge-led

Open Hardware, Infrared Wifi bridge with an integrated LED Strip.
C
2
star
59

MaxibonKataCSharp

C#
2
star
60

SwiftMonad

Swift
2
star
61

KarumiJekyllTheme

Karumi Official Jekyll Template
CSS
2
star
62

KataSuperHeroesSwiftUI

Swift
2
star
63

MagicCounterKataIOS

Magic counter kata for iOS developers. The main goal is to unit and integration testing.
Swift
1
star