added in version 22.1.0
belongs to Maven artifact com.android.support:leanback-v17:28.0.0-alpha1

Presenter

public abstract class Presenter
extends Object implements FacetProvider

java.lang.Object
   ↳ android.support.v17.leanback.widget.Presenter
Known Direct Subclasses
Known Indirect Subclasses


A Presenter is used to generate Views and bind Objects to them on demand. It is closely related to the concept of an RecyclerView.Adapter, but is not position-based. The leanback framework implements the adapter concept using ObjectAdapter which refers to a Presenter (or PresenterSelector) instance.

Presenters should be stateless. Presenters typically extend Presenter.ViewHolder to store all necessary view state information, such as references to child views to be used when binding to avoid expensive calls to findViewById(int).

A trivial Presenter that takes a string and renders it into a TextView:

 public class StringTextViewPresenter extends Presenter {
     // This class does not need a custom ViewHolder, since it does not use
     // a complex layout.

     @Override
     public ViewHolder onCreateViewHolder(ViewGroup parent) {
         return new ViewHolder(new TextView(parent.getContext()));
     }

     @Override
     public void onBindViewHolder(ViewHolder viewHolder, Object item) {
         String str = (String) item;
         TextView textView = (TextView) viewHolder.mView;

         textView.setText(item);
     }

     @Override
     public void onUnbindViewHolder(ViewHolder viewHolder) {
         // Nothing to unbind for TextView, but if this viewHolder had
         // allocated bitmaps, they can be released here.
     }
 }
 
In addition to view creation and binding, Presenter allows dynamic interface (facet) to be added: setFacet(Class, Object). Supported facets:
  • ItemAlignmentFacet is used by HorizontalGridView and VerticalGridView to customize child alignment.

    Summary

    Nested classes

    class Presenter.ViewHolder

    ViewHolder can be subclassed and used to cache any view accessors needed to improve binding performance (for example, results of findViewById) without needing to subclass a View. 

    class Presenter.ViewHolderTask

    Base class to perform a task on Presenter.ViewHolder. 

    Public constructors

    Presenter()

    Public methods

    final Object getFacet(Class<?> facetClass)

    Queries optional implemented facet.

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

    Binds a View to an item.

    void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item, List<Object> payloads)

    Binds a View to an item with a list of payloads.

    abstract Presenter.ViewHolder onCreateViewHolder(ViewGroup parent)

    Creates a new View.

    abstract void onUnbindViewHolder(Presenter.ViewHolder viewHolder)

    Unbinds a View from an item.

    void onViewAttachedToWindow(Presenter.ViewHolder holder)

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

    void onViewDetachedFromWindow(Presenter.ViewHolder holder)

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

    final void setFacet(Class<?> facetClass, Object facetImpl)

    Sets dynamic implemented facet in addition to basic Presenter functions.

    void setOnClickListener(Presenter.ViewHolder holder, View.OnClickListener listener)

    Called to set a click listener for the given view holder.

    Protected methods

    static void cancelAnimationsRecursive(View view)

    Utility method for removing all running animations on a view.

    Inherited methods

    From class java.lang.Object
    From interface android.support.v17.leanback.widget.FacetProvider

    Public constructors

    Presenter

    added in version 22.1.0
    Presenter ()

    Public methods

    getFacet

    added in version 24.1.0
    Object getFacet (Class<?> facetClass)

    Queries optional implemented facet.

    Parameters
    facetClass Class: Facet classes to query, examples are: class of ItemAlignmentFacet.

    Returns
    Object Facet implementation for the facetClass or null if feature not implemented.

    onBindViewHolder

    added in version 22.1.0
    void onBindViewHolder (Presenter.ViewHolder viewHolder, 
                    Object item)

    Binds a View to an item.

    Parameters
    viewHolder Presenter.ViewHolder

    item Object

    onBindViewHolder

    added in version 27.1.0
    void onBindViewHolder (Presenter.ViewHolder viewHolder, 
                    Object item, 
                    List<Object> payloads)

    Binds a View to an item with a list of payloads.

    Parameters
    viewHolder Presenter.ViewHolder: The ViewHolder which should be updated to represent the contents of the item at the given position in the data set.

    item Object: The item which should be bound to view holder.

    payloads List: A non-null list of merged payloads. Can be empty list if requires full update.

    onCreateViewHolder

    added in version 22.1.0
    Presenter.ViewHolder onCreateViewHolder (ViewGroup parent)

    Creates a new View.

    Parameters
    parent ViewGroup

    Returns
    Presenter.ViewHolder

    onUnbindViewHolder

    added in version 22.1.0
    void onUnbindViewHolder (Presenter.ViewHolder viewHolder)

    Unbinds a View from an item. Any expensive references may be released here, and any fields that are not bound for every item should be cleared here.

    Parameters
    viewHolder Presenter.ViewHolder

    onViewAttachedToWindow

    added in version 22.1.0
    void onViewAttachedToWindow (Presenter.ViewHolder holder)

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

    This can be used as a reasonable signal that the view is about to be seen by the user. If the adapter previously freed any resources in onViewDetachedFromWindow(ViewHolder) those resources should be restored here.

    Parameters
    holder Presenter.ViewHolder: Holder of the view being attached

    onViewDetachedFromWindow

    added in version 22.1.0
    void onViewDetachedFromWindow (Presenter.ViewHolder holder)

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

    Becoming detached from the window is not necessarily a permanent condition; the consumer of an presenter's views may choose to cache views offscreen while they are not visible, attaching and detaching them as appropriate.

    Any view property animations should be cancelled here or the view may fail to be recycled.

    Parameters
    holder Presenter.ViewHolder: Holder of the view being detached

    setFacet

    added in version 24.1.0
    void setFacet (Class<?> facetClass, 
                    Object facetImpl)

    Sets dynamic implemented facet in addition to basic Presenter functions.

    Parameters
    facetClass Class: Facet classes to query, can be class of ItemAlignmentFacet.

    facetImpl Object: Facet implementation.

    setOnClickListener

    added in version 22.1.0
    void setOnClickListener (Presenter.ViewHolder holder, 
                    View.OnClickListener listener)

    Called to set a click listener for the given view holder. The default implementation sets the click listener on the root view in the view holder. If the root view isn't focusable this method should be overridden to set the listener on the appropriate focusable child view(s).

    Parameters
    holder Presenter.ViewHolder: The view holder containing the view(s) on which the listener should be set.

    listener View.OnClickListener: The click listener to be set.

    Protected methods

    cancelAnimationsRecursive

    added in version 22.1.0
    void cancelAnimationsRecursive (View view)

    Utility method for removing all running animations on a view.

    Parameters
    view View