public final class

ClassPresenterSelector

extends PresenterSelector

 java.lang.Object

androidx.leanback.widget.PresenterSelector

↳androidx.leanback.widget.ClassPresenterSelector

Gradle dependencies

compile group: 'androidx.leanback', name: 'leanback', version: '1.2.0-alpha04'

  • groupId: androidx.leanback
  • artifactId: leanback
  • version: 1.2.0-alpha04

Artifact androidx.leanback:leanback:1.2.0-alpha04 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.leanback:leanback com.android.support:leanback-v17

Androidx class mapping:

androidx.leanback.widget.ClassPresenterSelector android.support.v17.leanback.widget.ClassPresenterSelector

Overview

A ClassPresenterSelector selects a Presenter based on the item's Java class.

Summary

Constructors
publicClassPresenterSelector()

Methods
public ClassPresenterSelectoraddClassPresenter(java.lang.Class<java.lang.Object> cls, Presenter presenter)

Sets a presenter to be used for the given class.

public ClassPresenterSelectoraddClassPresenterSelector(java.lang.Class<java.lang.Object> cls, PresenterSelector presenterSelector)

Sets a presenter selector to be used for the given class.

public abstract PresentergetPresenter(java.lang.Object item)

Returns a presenter for the given item.

public PresentergetPresenters()

Returns an array of all possible presenters.

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public ClassPresenterSelector()

Methods

public ClassPresenterSelector addClassPresenter(java.lang.Class<java.lang.Object> cls, Presenter presenter)

Sets a presenter to be used for the given class.

Parameters:

cls: The data model class to be rendered.
presenter: The presenter that renders the objects of the given class.

Returns:

This ClassPresenterSelector object.

public ClassPresenterSelector addClassPresenterSelector(java.lang.Class<java.lang.Object> cls, PresenterSelector presenterSelector)

Sets a presenter selector to be used for the given class.

Parameters:

cls: The data model class to be rendered.
presenterSelector: The presenter selector that finds the right presenter for a given class.

Returns:

This ClassPresenterSelector object.

public abstract Presenter getPresenter(java.lang.Object item)

Returns a presenter for the given item.

public Presenter getPresenters()

Returns an array of all possible presenters. The returned array should not be modified.

Source

/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package androidx.leanback.widget;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * A ClassPresenterSelector selects a {@link Presenter} based on the item's
 * Java class.
 */
public final class ClassPresenterSelector extends PresenterSelector {

    private final ArrayList<Presenter> mPresenters = new ArrayList<Presenter>();

    private final HashMap<Class<?>, Object> mClassMap = new HashMap<Class<?>, Object>();

    /**
     * Sets a presenter to be used for the given class.
     * @param cls The data model class to be rendered.
     * @param presenter The presenter that renders the objects of the given class.
     * @return This ClassPresenterSelector object.
     */
    public ClassPresenterSelector addClassPresenter(Class<?> cls, Presenter presenter) {
        mClassMap.put(cls, presenter);
        if (!mPresenters.contains(presenter)) {
            mPresenters.add(presenter);
        }
        return this;
    }

    /**
     * Sets a presenter selector to be used for the given class.
     * @param cls The data model class to be rendered.
     * @param presenterSelector The presenter selector that finds the right presenter for a given
     *                          class.
     * @return This ClassPresenterSelector object.
     */
    public ClassPresenterSelector addClassPresenterSelector(Class<?> cls,
            PresenterSelector presenterSelector) {
        mClassMap.put(cls, presenterSelector);
        Presenter[] innerPresenters = presenterSelector.getPresenters();
        for (int i = 0; i < innerPresenters.length; i++) {
            if (!mPresenters.contains(innerPresenters[i])) {
                mPresenters.add(innerPresenters[i]);
            }
        }
        return this;
    }

    @Nullable
    @Override
    public Presenter getPresenter(@Nullable Object item) {
        if (item == null) {
            return null;
        }
        Class<?> cls = item.getClass();
        Object presenter = null;

        do {
            presenter = mClassMap.get(cls);
            if (presenter instanceof PresenterSelector) {
                Presenter innerPresenter = ((PresenterSelector) presenter).getPresenter(item);
                if (innerPresenter != null) {
                    return innerPresenter;
                }
            }
            cls = cls.getSuperclass();
        } while (presenter == null && cls != null);

        return (Presenter) presenter;
    }

    @Override
    public Presenter[] getPresenters() {
        return mPresenters.toArray(new Presenter[mPresenters.size()]);
    }
}