epoxy-adapter / com.airbnb.epoxy / EpoxyModel

EpoxyModel

abstract class EpoxyModel<T : Any!>

Helper to bind data to a view using a builder style. The parameterized type should extend Android's View or EpoxyHolder.

See Also
EpoxyModelWithHolderEpoxyModelWithView

Types

AddPredicate

interface AddPredicate

SpanSizeOverrideCallback

interface SpanSizeOverrideCallback

Constructors

<init>

EpoxyModel(id: Long)
EpoxyModel()

Functions

addIf

open fun addIf(condition: Boolean, controller: EpoxyController): Unit

Add this model to the given controller if the condition is true. Can only be called from inside EpoxyController#buildModels().

open fun addIf(predicate: EpoxyModel.AddPredicate, controller: EpoxyController): Unit

Add this model to the given controller if the AddPredicate return true. Can only be called from inside EpoxyController#buildModels().

addTo

open fun addTo(controller: EpoxyController): Unit

Add this model to the given controller. Can only be called from inside .

addWithDebugValidation

fun addWithDebugValidation(controller: EpoxyController): Unit

This is used internally by generated models to turn on validation checking when "validateEpoxyModelUsage" is enabled and the model is used with an EpoxyController.

bind

open fun bind(view: T): Unit

Binds the current data to the given view. You should bind all fields including unset/empty fields to ensure proper recycling.

open fun bind(view: T, payloads: MutableList<Any!>): Unit

Similar to #bind(Object), but provides a non null, non empty list of payloads describing what changed. This is the payloads list specified in the adapter's notifyItemChanged method. This is a useful optimization to allow you to only change part of a view instead of updating the whole thing, which may prevent unnecessary layout calls. If there are no payloads then #bind(Object) is called instead. This will only be used if the model is used with an EpoxyAdapter

open fun bind(view: T, previouslyBoundModel: EpoxyModel<*>): Unit

Similar to #bind(Object), but provides a non null model which was previously bound to this view. This will only be called if the model is used with an EpoxyController.

buildView

open fun buildView(parent: ViewGroup): View!

Create and return a new instance of a view for this model. By default a view is created by inflating the layout resource.

equals

open fun equals(other: Any?): Boolean

getDefaultLayout

abstract fun getDefaultLayout(): Int

Return the default layout resource to be used when creating views for this model. The resource will be inflated to create a view for the model; additionally the layout int is used as the views type in the RecyclerView.

getLayout

fun getLayout(): Int

getSpanSize

open fun getSpanSize(totalSpanCount: Int, position: Int, itemCount: Int): Int

Subclasses can override this if they want their view to take up more than one span in a grid layout.

getViewType

open fun getViewType(): Int

Get the view type to associate with this model in the recyclerview. For models that use a layout resource, the view type is simply the layout resource value by default.

hashCode

open fun hashCode(): Int

hide

open fun hide(): EpoxyModel<T>

Change the visibility of the model so that it's view is hidden. This only works if the model is used in EpoxyAdapter or a EpoxyModelGroup, but is not supported in

id

open fun id(): Longopen fun id(id: Long): EpoxyModel<T>!

Override the default id in cases where the data subject naturally has an id, like an object from a database. This id can only be set before the model is added to the adapter, it is an error to change the id after that.

open fun id(vararg ids: Number!): EpoxyModel<T>!

Use multiple numbers as the id for this model. Useful when you don't have a single long that represents a unique id.

open fun id(id1: Long, id2: Long): EpoxyModel<T>!

Use two numbers as the id for this model. Useful when you don't have a single long that represents a unique id.

open fun id(key: CharSequence?): EpoxyModel<T>!

Use a string as the model id. Useful for models that don't clearly map to a numerical id. This is preferable to using String#hashCode() because that is a 32 bit hash and this is a 64 bit hash, giving better spread and less chance of collision with other ids.

open fun id(key: CharSequence?, vararg otherKeys: CharSequence!): EpoxyModel<T>!

Use several strings to define the id of the model.

open fun id(key: CharSequence?, id: Long): EpoxyModel<T>!

Set an id that is namespaced with a string. This is useful when you need to show models of multiple types, side by side and don't want to risk id collisions.

isShown

open fun isShown(): Boolean

Whether the model's view should be shown on screen. If false it won't be inflated and drawn, and will be like it was never added to the recycler view.

layout

open fun layout(layoutRes: Int): EpoxyModel<T>

onFailedToRecycleView

open fun onFailedToRecycleView(view: T): Boolean

Called if the RecyclerView failed to recycle this model's view. You can take this opportunity to clear the animation(s) that affect the View's transient state and return true so that the View can be recycled. Keep in mind that the View in question is already removed from the RecyclerView.

onMutation

fun onMutation(): Unit

This is used internally by generated models to do validation checking when "validateEpoxyModelUsage" is enabled and the model is used with an EpoxyController. This method validates that it is ok to change this model. It is only valid if the model hasn't yet been added, or the change is being done from an EpoxyController.Interceptor callback.

onViewAttachedToWindow

open fun onViewAttachedToWindow(view: T): Unit

Called when this model's view is attached to the window.

onViewDetachedFromWindow

open fun onViewDetachedFromWindow(view: T): Unit

Called when this model's view is detached from the the window.

onVisibilityChanged

open fun onVisibilityChanged(percentVisibleHeight: Float, percentVisibleWidth: Float, visibleHeight: Int, visibleWidth: Int, view: T): Unit

TODO link to the wiki

onVisibilityStateChanged

open fun onVisibilityStateChanged(visibilityState: Int, view: T): Unit

TODO link to the wiki

reset

open fun reset(): EpoxyModel<T>

Sets fields of the model to default ones.

shouldSaveViewState

open fun shouldSaveViewState(): Boolean

Whether the adapter should save the state of the view bound to this model.

show

open fun show(): EpoxyModel<T>

Change the visibility of the model so that it's view is shown. This only works if the model is used in EpoxyAdapter or a EpoxyModelGroup, but is not supported in

open fun show(show: Boolean): EpoxyModel<T>

Change the visibility of the model's view. This only works if the model is used in EpoxyAdapter or a EpoxyModelGroup, but is not supported in

spanSize

fun spanSize(totalSpanCount: Int, position: Int, itemCount: Int): Int

Returns the actual span size of this model, using the SpanSizeOverrideCallback if one was set, otherwise using the value from #getSpanSize(int, int, int)

spanSizeOverride

open fun spanSizeOverride(spanSizeCallback: EpoxyModel.SpanSizeOverrideCallback?): EpoxyModel<T>!

toString

open fun toString(): String

unbind

open fun unbind(view: T): Unit

Called when the view bound to this model is recycled. Subclasses can override this if their view should release resources when it's recycled.

validateStateHasNotChangedSinceAdded

fun validateStateHasNotChangedSinceAdded(descriptionOfChange: String!, modelPosition: Int): Unit

This is used internally by generated models to do validation checking when "validateEpoxyModelUsage" is enabled and the model is used with a EpoxyController. This method validates that the model's hashCode hasn't been changed since it was added to the controller. This is similar to #onMutation(), but that method is only used for specific model changes such as calling a setter. By checking the hashCode, this method allows us to catch more subtle changes, such as through setting a field directly or through changing an object that is set on the model.

Inheritors

CarouselModel_

open class CarouselModel_ : EpoxyModel<Carousel!>, GeneratedModel<Carousel!>, CarouselModelBuilder

Generated file. Do not modify!

EpoxyModelWithHolder

abstract class EpoxyModelWithHolder<T : EpoxyHolder!> : EpoxyModel<T>

A version of com.airbnb.epoxy.EpoxyModel that allows you to use a view holder pattern instead of a specific view when binding to your model.

EpoxyModelWithView

abstract class EpoxyModelWithView<T : View!> : EpoxyModel<T>

A model that allows its view to be built programmatically instead of by inflating a layout resource. Just implement #buildView so the adapter can create a new view for this model when needed.

SimpleEpoxyModel

open class SimpleEpoxyModel : EpoxyModel<View!>

Helper class for cases where you don't need to do anything special when binding the view. This allows you to just provide the layout instead of needing to create a separate EpoxyModel subclass. This is useful for static layouts. You can also specify an onClick listener and the span size.