RowPresenter

public abstract class RowPresenter
extends Presenter

java.lang.Object
   ↳ androidx.leanback.widget.Presenter
     ↳ androidx.leanback.widget.RowPresenter


An abstract Presenter that renders an Object in RowsFragment, the object can be subclass Row or a generic one. When the object is not Row class, RowPresenter.ViewHolder.getRow() returns null.

Customize UI widgets

When a subclass of RowPresenter adds UI widgets, it should subclass RowPresenter.ViewHolder and override createRowViewHolder(ViewGroup) and initializeRowViewHolder(ViewHolder). The subclass must use layout id "row_content" for the widget that will be aligned to the title of any HeadersFragment that may exist in the parent fragment. RowPresenter contains an optional and replaceable RowHeaderPresenter that renders the header. You can disable the default rendering or replace the Presenter with a new header presenter by calling setHeaderPresenter(RowHeaderPresenter).

UI events from fragments

RowPresenter receives calls from its parent (typically a Fragment) when:

Activated status

The activated status of a row is applied to the row view and its children via View.setActivated(boolean). The activated status is typically used to control BaseCardView info region visibility. The row's activated status can be controlled by selected status and/or expanded status. Call setSyncActivatePolicy(int) and choose one of the four policies:

User events

RowPresenter provides OnItemViewSelectedListener and OnItemViewClickedListener. If a subclass wants to add its own View.OnFocusChangeListener or View.OnClickListener, it must do that in createRowViewHolder(ViewGroup) to be properly chained by the library. Adding View listeners after createRowViewHolder(ViewGroup) is undefined and may result in incorrect behavior by the library's listeners.

Selection animation

When a user scrolls through rows, a fragment will initiate animation and call setSelectLevel(Presenter.ViewHolder, float) with float value between 0 and 1. By default, the RowPresenter draws a dim overlay on top of the row view for views that are not selected. Subclasses may override this default effect by having isUsingDefaultSelectEffect() return false and overriding onSelectLevelChanged(ViewHolder) to apply a different selection effect.

Call setSelectEffectEnabled(boolean) to enable/disable the select effect, This will not only enable/disable the default dim effect but also subclasses must respect this flag as well.

Summary

Nested classes

class RowPresenter.ViewHolder

A ViewHolder for a Row

Constants

int SYNC_ACTIVATED_CUSTOM

Don't synchronize row view activated status with selected status or expanded status, application will do its own through RowPresenter.ViewHolder.setActivated(boolean).

int SYNC_ACTIVATED_TO_EXPANDED

Synchronizes row view's activated status to expand status of the row view holder.

int SYNC_ACTIVATED_TO_EXPANDED_AND_SELECTED

Sets the row view's activated status to true when both expand and selected are true.

int SYNC_ACTIVATED_TO_SELECTED

Synchronizes row view's activated status to selected status of the row view holder.

Public constructors

RowPresenter()

Constructs a RowPresenter.

Public methods

void freeze(RowPresenter.ViewHolder holder, boolean freeze)

Freezes/unfreezes the row, typically used when a transition starts/ends.

final RowHeaderPresenter getHeaderPresenter()

Returns the Presenter used for rendering the header, or null if none has been set.

final RowPresenter.ViewHolder getRowViewHolder(Presenter.ViewHolder holder)

Returns the RowPresenter.ViewHolder from the given RowPresenter ViewHolder.

final boolean getSelectEffectEnabled()

Returns true if the row selection effect is enabled.

final float getSelectLevel(Presenter.ViewHolder vh)

Returns the current select level.

final int getSyncActivatePolicy()

Returns the policy of updating row view activated status.

boolean isUsingDefaultSelectEffect()

Returns true if this RowPresenter is using the default dimming effect.

final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item)

Binds a View to an item.

final Presenter.ViewHolder onCreateViewHolder(ViewGroup parent)

Creates a new View.

final void onUnbindViewHolder(Presenter.ViewHolder viewHolder)

Unbinds a View from an item.

final void onViewAttachedToWindow(Presenter.ViewHolder holder)

Called when a view created by this presenter has been attached to a window.

final void onViewDetachedFromWindow(Presenter.ViewHolder holder)

Called when a view created by this presenter has been detached from its window.

void setEntranceTransitionState(RowPresenter.ViewHolder holder, boolean afterEntrance)

Changes the visibility of views.

final void setHeaderPresenter(RowHeaderPresenter headerPresenter)

Sets the Presenter used for rendering the header.

final void setRowViewExpanded(Presenter.ViewHolder holder, boolean expanded)

Sets the expanded state of a Row view.

final void setRowViewSelected(Presenter.ViewHolder holder, boolean selected)

Sets the selected state of a Row view.

final void setSelectEffectEnabled(boolean applyDimOnSelect)

Enables or disables the row selection effect.

final void setSelectLevel(Presenter.ViewHolder vh, float level)

Sets the current select level to a value between 0 (unselected) and 1 (selected).

final void setSyncActivatePolicy(int syncActivatePolicy)

Sets the policy of updating row view activated status.

Protected methods

abstract RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent)

Called to create a ViewHolder object for a Row.

void dispatchItemSelectedListener(RowPresenter.ViewHolder vh, boolean selected)

This method is only called from onRowViewSelected(ViewHolder, boolean) onRowViewSelected.

void initializeRowViewHolder(RowPresenter.ViewHolder vh)

Called after a RowPresenter.ViewHolder is created for a Row.

boolean isClippingChildren()

Returns true if the Row view should clip its children.

void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item)

Binds the given row object to the given ViewHolder.

void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh)

Invoked when the row view is attached to the window.

void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh)

Invoked when the row view is detached from the window.

void onRowViewExpanded(RowPresenter.ViewHolder vh, boolean expanded)

Called when the row view's expanded state changes.

void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected)

Called when the given row view changes selection state.

void onSelectLevelChanged(RowPresenter.ViewHolder vh)

Callback when the select level changes.

void onUnbindRowViewHolder(RowPresenter.ViewHolder vh)

Unbinds the given ViewHolder.

Inherited methods

Constants

SYNC_ACTIVATED_CUSTOM

public static final int SYNC_ACTIVATED_CUSTOM

Don't synchronize row view activated status with selected status or expanded status, application will do its own through RowPresenter.ViewHolder.setActivated(boolean).

Constant Value: 0 (0x00000000)

SYNC_ACTIVATED_TO_EXPANDED

public static final int SYNC_ACTIVATED_TO_EXPANDED

Synchronizes row view's activated status to expand status of the row view holder.

Constant Value: 1 (0x00000001)

SYNC_ACTIVATED_TO_EXPANDED_AND_SELECTED

public static final int SYNC_ACTIVATED_TO_EXPANDED_AND_SELECTED

Sets the row view's activated status to true when both expand and selected are true.

Constant Value: 3 (0x00000003)

SYNC_ACTIVATED_TO_SELECTED

public static final int SYNC_ACTIVATED_TO_SELECTED

Synchronizes row view's activated status to selected status of the row view holder.

Constant Value: 2 (0x00000002)

Public constructors

RowPresenter

public RowPresenter ()

Constructs a RowPresenter.

Public methods

freeze

public void freeze (RowPresenter.ViewHolder holder, 
                boolean freeze)

Freezes/unfreezes the row, typically used when a transition starts/ends. This method is called by the fragment, it should not call it directly by the application.

Parameters
holder RowPresenter.ViewHolder

freeze boolean

getHeaderPresenter

public final