Leanback создает различные пользовательские представления строк

Я использую библиотеку Leanback и хотел бы знать, как создать несколько пользовательских представлений строк. Для создания разных элементов подряд вам необходимо расширить PresenterSelector

Я попытался сделать то же самое для ListRowPresenter, но не смог добиться нужного результата. Ни одна строка не была привязана к RowsSupportFragment, а в журналах метод getPresenter из PresenterSelector вызывался несколько раз, пока не закончилась память.


person Ultimo_m    schedule 11.10.2018    source источник


Ответы (1)


Чтобы решить эту проблему, мне пришлось проверить репозиторий витрин Leanback.

На основе класса ShadowRowPresenterSelector Мне удалось найти, как создать селектор для моих пользовательских RowPresenter.

class ShadowRowPresenterSelector : PresenterSelector() {

    private val aCustomListRowPresenter by lazy { ACustomListRowPresenter() }
    private val bCustomListRowPresenter by lazy { BCustomListRowPresenter() }

    override fun getPresenter(item: Any): Presenter {
        return when (item) {
            is ARowVM -> {
                aCustomListRowPresenter
            }
            is BRowVM -> {
                bCustomListRowPresenter
            }
            else -> aCustomListRowPresenter
        }
    }

    override fun getPresenters(): Array<Presenter> {
        return arrayOf(aCustomListRowPresenter, bCustomListRowPresenter)
    }
}

Что заставило меня вызывать метод getPresenter несколько раз, так это то, что я по ошибке каждый раз создавал новый объект для моего пользовательского презентатора строк.

Я надеюсь, что это поможет кому-то в будущем.

person Ultimo_m    schedule 11.10.2018