├── settings.gradle ├── library ├── src │ ├── test │ │ ├── resources │ │ │ └── mockito-extensions │ │ │ │ └── org.mockito.plugins.MockMaker │ │ └── java │ │ │ └── io │ │ │ └── github │ │ │ └── luizgrp │ │ │ └── sectionedrecyclerviewadapter │ │ │ ├── tools │ │ │ ├── DummyViewAdapterFake.java │ │ │ ├── TestScenario.java │ │ │ ├── Scenario4.java │ │ │ ├── Scenario1.java │ │ │ └── Scenario2.java │ │ │ ├── SectionPositionIdentifierEmptyAdapterTest.java │ │ │ ├── SectionNotifierScenario3Test.java │ │ │ ├── SectionNotifierScenario2Test.java │ │ │ ├── SectionedRecyclerViewAdapterScenario4Test.java │ │ │ ├── SectionAdapterListUpdateCallbackTest.java │ │ │ └── SectionedRecyclerViewAdapterRealSectionsScenarioTest.java │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── io │ │ └── github │ │ └── luizgrp │ │ └── sectionedrecyclerviewadapter │ │ ├── utils │ │ └── EmptyViewHolder.java │ │ ├── SectionAdapterListUpdateCallback.java │ │ └── SectionPositionIdentifier.java ├── build_files │ ├── jacoco.gradle │ ├── static-code-analysis.gradle │ └── android-release-aar.gradle ├── proguard-rules.pro └── build.gradle ├── art ├── sc1.png ├── sc2.png ├── sc3.png ├── sc4.png └── demosc.png ├── app ├── src │ └── main │ │ ├── ic_launcher-web.png │ │ ├── res │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ ├── drawable │ │ │ ├── ic_keyboard_arrow_up_black_18dp.xml │ │ │ ├── ic_add_white_48dp.xml │ │ │ ├── ic_keyboard_arrow_down_black_18dp.xml │ │ │ ├── ic_keyboard_arrow_right_black_18dp.xml │ │ │ ├── selector_btn.xml │ │ │ ├── ic_movie_black_48dp.xml │ │ │ ├── ic_view_day_black_48dp.xml │ │ │ ├── selector_item.xml │ │ │ ├── ic_business_black_48dp.xml │ │ │ ├── ic_directions_run_black_48dp.xml │ │ │ ├── ic_public_black_48dp.xml │ │ │ ├── ic_tag_faces_black_48dp.xml │ │ │ ├── ic_cloud_off_black_48dp.xml │ │ │ ├── ic_devices_other_black_48dp.xml │ │ │ ├── ic_face_black_48dp.xml │ │ │ └── ic_monetization_on_black_24dp.xml │ │ ├── values-v21 │ │ │ └── styles.xml │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ ├── menu │ │ │ ├── menu_ex7.xml │ │ │ └── activity_home_drawer.xml │ │ ├── values │ │ │ ├── dimens.xml │ │ │ ├── styles.xml │ │ │ ├── colors.xml │ │ │ └── strings.xml │ │ ├── layout │ │ │ ├── fragment_ex1.xml │ │ │ ├── fragment_ex2.xml │ │ │ ├── fragment_ex3.xml │ │ │ ├── fragment_ex4.xml │ │ │ ├── fragment_ex5.xml │ │ │ ├── fragment_ex6.xml │ │ │ ├── fragment_ex7.xml │ │ │ ├── fragment_ex9.xml │ │ │ ├── fragment_home.xml │ │ │ ├── section_ex3_loading.xml │ │ │ ├── section_ex8_loading.xml │ │ │ ├── section_ex8_empty.xml │ │ │ ├── section_ex8_failed.xml │ │ │ ├── content_home.xml │ │ │ ├── fragment_ex8.xml │ │ │ ├── section_ex2_footer.xml │ │ │ ├── section_ex3_footer.xml │ │ │ ├── section_ex3_failed.xml │ │ │ ├── section_ex1_header.xml │ │ │ ├── section_ex7_header.xml │ │ │ ├── section_ex2_header.xml │ │ │ ├── section_ex3_header.xml │ │ │ ├── activity_home.xml │ │ │ ├── section_ex1_item.xml │ │ │ ├── section_ex4_item.xml │ │ │ ├── section_ex7_item.xml │ │ │ ├── section_ex6_header.xml │ │ │ ├── app_bar_home.xml │ │ │ ├── section_ex5_header.xml │ │ │ ├── nav_header_home.xml │ │ │ ├── section_ex4_header.xml │ │ │ ├── section_ex2_item.xml │ │ │ ├── section_ex3_item.xml │ │ │ ├── section_ex8_item.xml │ │ │ ├── section_ex6_item.xml │ │ │ ├── section_ex5_item.xml │ │ │ └── section_ex9_watchlist_header.xml │ │ └── navigation │ │ │ └── nav_graph.xml │ │ ├── java │ │ └── io │ │ │ └── github │ │ │ └── luizgrp │ │ │ └── sectionedrecyclerviewadapter │ │ │ └── demo │ │ │ ├── example7 │ │ │ ├── FilterableSection.java │ │ │ ├── Contact.java │ │ │ ├── HeaderViewHolder.java │ │ │ ├── ItemViewHolder.java │ │ │ ├── LoadContactsUseCase.java │ │ │ └── ContactsSection.java │ │ │ ├── example6 │ │ │ ├── Movie.java │ │ │ ├── ItemViewHolder.java │ │ │ ├── HeaderViewHolder.java │ │ │ ├── LoadMoviesUseCase.java │ │ │ ├── ExpandableMovieSection.java │ │ │ └── Example6Fragment.java │ │ │ ├── example5 │ │ │ ├── Movie.java │ │ │ ├── HeaderViewHolder.java │ │ │ ├── ItemViewHolder.java │ │ │ ├── LoadMoviesUseCase.java │ │ │ ├── MovieSection.java │ │ │ └── Example5Fragment.java │ │ │ ├── example1 │ │ │ ├── Contact.java │ │ │ ├── HeaderViewHolder.java │ │ │ ├── ItemViewHolder.java │ │ │ ├── LoadContactsUseCase.java │ │ │ ├── ContactsSection.java │ │ │ └── Example1Fragment.java │ │ │ ├── example4 │ │ │ ├── Contact.java │ │ │ ├── ItemViewHolder.java │ │ │ ├── HeaderViewHolder.java │ │ │ ├── LoadContactsUseCase.java │ │ │ ├── ExpandableContactsSection.java │ │ │ └── Example4Fragment.java │ │ │ ├── example2 │ │ │ ├── FooterViewHolder.java │ │ │ ├── News.java │ │ │ ├── HeaderViewHolder.java │ │ │ ├── ItemViewHolder.java │ │ │ ├── LoadNewsUseCase.java │ │ │ ├── NewsSection.java │ │ │ └── Example2Fragment.java │ │ │ ├── example3 │ │ │ ├── FooterViewHolder.java │ │ │ ├── News.java │ │ │ ├── FailedViewHolder.java │ │ │ ├── HeaderViewHolder.java │ │ │ ├── ItemViewHolder.java │ │ │ └── LoadNewsUseCase.java │ │ │ ├── example8 │ │ │ ├── Person.java │ │ │ ├── ItemViewHolder.java │ │ │ ├── PersonListDiffCallback.java │ │ │ └── HeaderViewHolder.java │ │ │ ├── example9 │ │ │ ├── WatchItem.java │ │ │ ├── PortfolioHeaderViewHolder.java │ │ │ ├── WatchItemViewHolder.java │ │ │ ├── PortfolioItem.java │ │ │ ├── PortfolioItemViewHolder.java │ │ │ └── WatchListSection.java │ │ │ ├── HomeFragment.java │ │ │ ├── info │ │ │ ├── SectionInfoFactory.java │ │ │ ├── SectionItemInfoFactory.java │ │ │ ├── SectionItemInfo.java │ │ │ └── SectionInfo.java │ │ │ └── HomeActivity.java │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── .travis.yml ├── gradle.properties ├── .github └── ISSUE_TEMPLATE │ ├── feature_request.md │ ├── bug_report.md │ ├── question.md │ └── pull-request.md ├── LICENSE ├── config └── pmd-ruleset.xml ├── CONTRIBUTING.md └── gradlew.bat /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':library' 2 | -------------------------------------------------------------------------------- /library/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline -------------------------------------------------------------------------------- /art/sc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/art/sc1.png -------------------------------------------------------------------------------- /art/sc2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/art/sc2.png -------------------------------------------------------------------------------- /art/sc3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/art/sc3.png -------------------------------------------------------------------------------- /art/sc4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/art/sc4.png -------------------------------------------------------------------------------- /art/demosc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/art/demosc.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luizgrp/SectionedRecyclerViewAdapter/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /library/build_files/jacoco.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'jacoco-android' 2 | 3 | jacoco { 4 | toolVersion = versions.jacoco 5 | } 6 | 7 | tasks.withType(Test) { 8 | jacoco.includeNoLocationClasses = true 9 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Apr 29 19:58:40 BST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example7/FilterableSection.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example7; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | interface FilterableSection { 6 | void filter(@NonNull final String query); 7 | } 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Gradle files 2 | .gradle/ 3 | build/ 4 | 5 | # Local configuration file (sdk path, etc) 6 | local.properties 7 | 8 | # Android Studio generated folders 9 | .navigation/ 10 | captures/ 11 | .externalNativeBuild 12 | 13 | # IntelliJ project files 14 | *.iml 15 | .idea/ 16 | 17 | # Misc 18 | .DS_Store 19 | 20 | # Keystore files 21 | *.jks 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_up_black_18dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_white_48dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_down_black_18dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_right_black_18dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | > 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_movie_black_48dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_day_black_48dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_ex7.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | 16dp 7 | 160dp 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example6/Movie.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example6; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | class Movie { 6 | final String name; 7 | final String category; 8 | 9 | Movie(@NonNull final String name, @NonNull final String category) { 10 | this.name = name; 11 | this.category = category; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example5/Movie.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example5; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | final class Movie { 6 | final String name; 7 | final String category; 8 | 9 | Movie(@NonNull final String name, @NonNull final String category) { 10 | this.name = name; 11 | this.category = category; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_ex1.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_ex2.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_ex3.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_ex4.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_ex5.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_ex6.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_ex7.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_ex9.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example1/Contact.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example1; 2 | 3 | import androidx.annotation.DrawableRes; 4 | import androidx.annotation.NonNull; 5 | 6 | final class Contact { 7 | final String name; 8 | @DrawableRes 9 | final int profileImage; 10 | 11 | Contact(@NonNull final String name, @DrawableRes final int profileImage) { 12 | this.name = name; 13 | this.profileImage = profileImage; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example4/Contact.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example4; 2 | 3 | import androidx.annotation.DrawableRes; 4 | import androidx.annotation.NonNull; 5 | 6 | final class Contact { 7 | final String name; 8 | @DrawableRes 9 | final int profileImage; 10 | 11 | Contact(@NonNull final String name, @DrawableRes final int profileImage) { 12 | this.name = name; 13 | this.profileImage = profileImage; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example7/Contact.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example7; 2 | 3 | import androidx.annotation.DrawableRes; 4 | import androidx.annotation.NonNull; 5 | 6 | final class Contact { 7 | final String name; 8 | @DrawableRes 9 | final int profileImage; 10 | 11 | Contact(@NonNull final String name, @DrawableRes final int profileImage) { 12 | this.name = name; 13 | this.profileImage = profileImage; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example2/FooterViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example2; 2 | 3 | import android.view.View; 4 | 5 | import androidx.annotation.NonNull; 6 | import androidx.recyclerview.widget.RecyclerView; 7 | 8 | final class FooterViewHolder extends RecyclerView.ViewHolder { 9 | 10 | final View rootView; 11 | 12 | FooterViewHolder(@NonNull final View view) { 13 | super(view); 14 | 15 | rootView = view; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example3/FooterViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example3; 2 | 3 | import android.view.View; 4 | 5 | import androidx.annotation.NonNull; 6 | import androidx.recyclerview.widget.RecyclerView; 7 | 8 | final class FooterViewHolder extends RecyclerView.ViewHolder { 9 | 10 | final View rootView; 11 | 12 | FooterViewHolder(@NonNull final View view) { 13 | super(view); 14 | 15 | rootView = view; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_business_black_48dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_directions_run_black_48dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example2/News.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example2; 2 | 3 | import androidx.annotation.DrawableRes; 4 | import androidx.annotation.NonNull; 5 | 6 | final class News { 7 | 8 | final String header; 9 | final String date; 10 | @DrawableRes 11 | final int icon; 12 | 13 | News(@NonNull final String header, @NonNull final String date, @DrawableRes final int icon) { 14 | this.header = header; 15 | this.date = date; 16 | this.icon = icon; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example3/News.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example3; 2 | 3 | import androidx.annotation.DrawableRes; 4 | import androidx.annotation.NonNull; 5 | 6 | final class News { 7 | 8 | final String header; 9 | final String date; 10 | @DrawableRes 11 | final int icon; 12 | 13 | News(@NonNull final String header, @NonNull final String date, @DrawableRes final int icon) { 14 | this.header = header; 15 | this.date = date; 16 | this.icon = icon; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /library/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/utils/EmptyViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.utils; 2 | 3 | import android.view.View; 4 | 5 | import androidx.recyclerview.widget.RecyclerView; 6 | 7 | /** 8 | * A concrete class of an empty ViewHolder. 9 | * Should be used to avoid the boilerplate of creating a ViewHolder class for simple case 10 | * scenarios. 11 | */ 12 | public class EmptyViewHolder extends RecyclerView.ViewHolder { 13 | public EmptyViewHolder(final View itemView) { 14 | super(itemView); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example8/Person.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example8; 2 | 3 | import androidx.annotation.DrawableRes; 4 | import androidx.annotation.NonNull; 5 | 6 | class Person { 7 | final String name; 8 | final String id; 9 | @DrawableRes 10 | final int profileImage; 11 | 12 | Person(@NonNull final String name, @NonNull final String id, @DrawableRes final int profileImage) { 13 | this.name = name; 14 | this.id = id; 15 | this.profileImage = profileImage; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/section_ex3_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/section_ex8_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_public_black_48dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example3/FailedViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example3; 2 | 3 | import android.view.View; 4 | 5 | import androidx.annotation.NonNull; 6 | import androidx.recyclerview.widget.RecyclerView; 7 | import io.github.luizgrp.sectionedrecyclerviewadapter.demo.R; 8 | 9 | final class FailedViewHolder extends RecyclerView.ViewHolder { 10 | 11 | final View rootView; 12 | 13 | FailedViewHolder(@NonNull final View itemView) { 14 | super(itemView); 15 | 16 | rootView = itemView.findViewById(R.id.rootView); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example1/HeaderViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example1; 2 | 3 | import android.view.View; 4 | import android.widget.TextView; 5 | 6 | import androidx.annotation.NonNull; 7 | import androidx.recyclerview.widget.RecyclerView; 8 | import io.github.luizgrp.sectionedrecyclerviewadapter.demo.R; 9 | 10 | final class HeaderViewHolder extends RecyclerView.ViewHolder { 11 | 12 | final TextView tvTitle; 13 | 14 | HeaderViewHolder(@NonNull View view) { 15 | super(view); 16 | 17 | tvTitle = view.findViewById(R.id.tvTitle); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example7/HeaderViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example7; 2 | 3 | import android.view.View; 4 | import android.widget.TextView; 5 | 6 | import androidx.annotation.NonNull; 7 | import androidx.recyclerview.widget.RecyclerView; 8 | import io.github.luizgrp.sectionedrecyclerviewadapter.demo.R; 9 | 10 | class HeaderViewHolder extends RecyclerView.ViewHolder { 11 | 12 | final TextView tvTitle; 13 | 14 | HeaderViewHolder(@NonNull final View view) { 15 | super(view); 16 | 17 | tvTitle = view.findViewById(R.id.tvTitle); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example2/HeaderViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example2; 2 | 3 | import android.view.View; 4 | import android.widget.TextView; 5 | 6 | import androidx.annotation.NonNull; 7 | import androidx.recyclerview.widget.RecyclerView; 8 | import io.github.luizgrp.sectionedrecyclerviewadapter.demo.R; 9 | 10 | final class HeaderViewHolder extends RecyclerView.ViewHolder { 11 | 12 | final TextView tvTitle; 13 | 14 | HeaderViewHolder(@NonNull final View view) { 15 | super(view); 16 | 17 | tvTitle = view.findViewById(R.id.tvTitle); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tag_faces_black_48dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example3/HeaderViewHolder.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example3; 2 | 3 | import android.view.View; 4 | import android.widget.TextView; 5 | 6 | import androidx.annotation.NonNull; 7 | import androidx.recyclerview.widget.RecyclerView; 8 | import io.github.luizgrp.sectionedrecyclerviewadapter.demo.R; 9 | 10 | final class HeaderViewHolder extends RecyclerView.ViewHolder { 11 | 12 | final TextView tvTitle; 13 | 14 | HeaderViewHolder(@NonNull final View itemView) { 15 | super(itemView); 16 | 17 | tvTitle = itemView.findViewById(R.id.tvTitle); 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cloud_off_black_48dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_devices_other_black_48dp.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/io/github/luizgrp/sectionedrecyclerviewadapter/demo/example9/WatchItem.java: -------------------------------------------------------------------------------- 1 | package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example9; 2 | 3 | import androidx.annotation.ColorInt; 4 | import androidx.annotation.NonNull; 5 | 6 | class WatchItem { 7 | final String code; 8 | String price; 9 | String delta; 10 | @ColorInt 11 | int deltaColor; 12 | 13 | WatchItem(@NonNull final String code, @NonNull final String price, @NonNull final String delta, 14 | final @ColorInt int deltaColor) { 15 | this.code = code; 16 | this.price = price; 17 | this.delta = delta; 18 | this.deltaColor = deltaColor; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/section_ex8_empty.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 |