# drakeet/multitype

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/drakeet-multitype).**

5,759 stars · 746 forks · Kotlin · Apache-2.0

## Links

- GitHub: https://github.com/drakeet/MultiType
- awesome-repositories: https://awesome-repositories.com/repository/drakeet-multitype.md

## Topics

`android-library` `multitype` `one-to-many` `one2many` `recyclerview` `recyclerview-multi-type`

## Description

MultiType is an Android RecyclerView adapter and UI component toolkit designed to map multiple data types to distinct layouts within a single scrolling list. It functions as a multi-type view manager that automates the association between diverse data models and their corresponding view holders.

The library includes a data-to-view expander that transforms single data objects into multiple list items, allowing complex information patterns to be represented across several rows. This mechanism enables the representation of complex data lists through object-to-item expansion.

The system manages heterogeneous content styles by handling dynamic view type resolution and type-to-layout mapping. It further simplifies UI development by decoupling view logic from specific holder declarations to reduce manual boilerplate during custom view binding.

## Tags

### Mobile Development

- [RecyclerView Adapter Wrappers](https://awesome-repositories.com/f/mobile-development/recyclerview-adapter-wrappers.md) — Provides a RecyclerView adapter that abstracts the complexity of mapping multiple data types to distinct layouts.
- [Android UI Components](https://awesome-repositories.com/f/mobile-development/android-ecosystem/android-ui-components.md) — Offers a toolkit for implementing heterogeneous content styles in mobile list views.
- [View Bindings](https://awesome-repositories.com/f/mobile-development/view-bindings.md) — Connects custom layout logic to list items without manually declaring a view holder for every component. ([source](https://github.com/drakeet/multitype#readme))

### Part of an Awesome List

- [Heterogeneous RecyclerView Layouts](https://awesome-repositories.com/f/awesome-lists/devtools/list-views/recyclerview-lists/heterogeneous-recyclerview-layouts.md) — Handles multiple layout types within a single scrolling list to display diverse content styles and data patterns.
- [Model-Driven View Holders](https://awesome-repositories.com/f/awesome-lists/devtools/list-views/recyclerview-lists/model-driven-view-holders.md) — Automates the association between diverse data models and their corresponding view holders.
- [List and Grid Components](https://awesome-repositories.com/f/awesome-lists/devtools/list-and-grid-components.md) — Development of complex list pages.
- [List Components](https://awesome-repositories.com/f/awesome-lists/devtools/list-components.md) — Development of complex list pages.

### User Interface & Experience

- [Item Expansion](https://awesome-repositories.com/f/user-interface-experience/data-to-ui-mappings/item-expansion.md) — Transforms a single data object into multiple list items to represent complex information patterns. ([source](https://github.com/drakeet/multitype#readme))
- [Data-Driven List Population](https://awesome-repositories.com/f/user-interface-experience/dynamic-list-rendering/dynamic-action-list-population/data-driven-list-population.md) — Determines the final sequence of views by processing a data stream through expansion and mapping rules.
- [Dynamic View Type Resolution](https://awesome-repositories.com/f/user-interface-experience/dynamic-view-type-resolution.md) — Automatically resolves the correct layout at runtime based on the specific data type encountered during list population.
- [Data-to-Item Expanders](https://awesome-repositories.com/f/user-interface-experience/expandable-list-frameworks/data-to-item-expanders.md) — Transforms single data objects into multiple list items to represent complex information patterns across several rows.
- [Object-to-Item Expansion](https://awesome-repositories.com/f/user-interface-experience/object-to-item-expansion.md) — Transforms a single data object into multiple list items to represent complex information patterns across several rows.
- [Type-to-Component Mappings](https://awesome-repositories.com/f/user-interface-experience/view-to-data-mappings/type-to-component-mappings.md) — Automatically matches specific data classes to layout resources to manage diverse view types in a single list.
- [Abstracted Bindings](https://awesome-repositories.com/f/user-interface-experience/layout-utilities/presentation-engines/list-rendering/viewholder-patterns/abstracted-bindings.md) — Provides a mechanism to connect custom layouts to data without manual boilerplate for every view holder.
- [View-to-Data Mappings](https://awesome-repositories.com/f/user-interface-experience/view-to-data-mappings.md) — Maps different data objects to specific UI layouts automatically to avoid repetitive boilerplate code.

### Data & Databases

- [Expanded List Representations](https://awesome-repositories.com/f/data-databases/complex-data-views/expanded-list-representations.md) — Expands single data objects into multiple list items to show detailed information across several rows.
