Google 致力于为黑人社区推动种族平等。查看具体举措

Presenter

abstract class Presenter : FacetProvider
kotlin.Any
   ↳ androidx.leanback.widget.Presenter

A Presenter is used to generate Views and bind Objects to them on demand. It is closely related to the concept of an , 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 ViewHolder to store all necessary view state information, such as references to child views to be used when binding to avoid expensive calls to View#findViewById(int).

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

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
    open

    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.

    abstract

    Base class to perform a task on Presenter.

    Public constructors

    A Presenter is used to generate Views and bind Objects to them on demand.

    Public methods
    Any!
    getFacet(facetClass: Class<*>!)

    abstract Unit
    onBindViewHolder(viewHolder: Presenter.ViewHolder!, item: Any!)

    Binds a View to an item.

    open Unit
    onBindViewHolder(viewHolder: Presenter.ViewHolder!, item: Any!, payloads: MutableList<Any!>!)

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

    abstract Presenter.ViewHolder!

    Creates a new View.

    abstract Unit

    Unbinds a View from an item.

    open Unit

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

    open Unit

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

    Unit
    setFacet(facetClass: Class<*>!, facetImpl: Any!)

    Sets dynamic implemented facet in addition to basic Presenter functions.

    open Unit

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

    Protected methods
    open static Unit

    Utility method for removing all running animations on a view.

    Public constructors

    <init>

    Presenter()

    A Presenter is used to generate Views and bind Objects to them on demand. It is closely related to the concept of an , 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 ViewHolder to store all necessary view state information, such as references to child views to be used when binding to avoid expensive calls to View#findViewById(int).

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

    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.
  • Public methods

    getFacet

    fun getFacet(facetClass: Class<*>!): Any!

    onBindViewHolder

    abstract fun onBindViewHolder(
        viewHolder: Presenter.ViewHolder!,
        item: Any!
    ): Unit

    Binds a View to an item.

    onBindViewHolder

    open fun onBindViewHolder(
        viewHolder: Presenter.ViewHolder!,
        item: Any!,
        payloads: MutableList<Any!>!
    ): Unit

    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 Any!: The item which should be bound to view holder.
    payloads MutableList<Any!>!: A non-null list of merged payloads. Can be empty list if requires full update.

    onCreateViewHolder

    abstract fun onCreateViewHolder(parent: ViewGroup!): Presenter.ViewHolder!

    Creates a new View.

    onUnbindViewHolder

    abstract fun onUnbindViewHolder(viewHolder: Presenter.ViewHolder!): Unit

    Unbinds a