Leanback创建不同的自定义行视图

时间:2018-10-11 13:37:22

标签: android android-tv leanback

我正在使用Leanback库,我想知道如何创建多个自定义行视图。要连续创建不同的项目,您需要扩展PresenterSelector

我尝试对ListRowPresenter做相同的操作,但无法获得正确的结果。 RowsSupportFragment中没有绑定任何行,在日志中,getPresenter中的PresenterSelector方法被多次调用,直到内存不足为止。

1 个答案:

答案 0 :(得分:0)

要解决此问题,我必须检查leanback showcase repository

基于类 ShadowRowPresenterSelector ,我设法找到了如何为自定义RowPresenters创建选择器。

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被多次调用的原因是,每次为自定义行演示者创建一个新对象时,我都会错误地创建一个。

我希望这会在将来对某人有所帮助。