首页 文章

BrowseFragment上的每个标头的多个ListRows - Leanback库

提问于
浏览
9

我'm getting started with Leanback support for our app. As per UI requirements I need to add multiple list rows corresponding to each header, it'就像Youtube App在Android TV上所做的那样 . 默认 ListRowPresenter 似乎只渲染一个列表行及其 Headers . 是否有任何支持多个列表行的演示者?我正在考虑在每个项目中嵌入RowsFragment创建自定义演示者的行,如果我的方法错误,请纠正我 .
enter image description here

2 回答

  • 7

    Leanback团队最近在库的版本 24.0.0 中为一个 HeaderItem 添加了多个 ListRow 的支持 . 它允许您提供映射到 HeaderItemRowsFragment . 您可以在Leanback showcase中看到它的示例 . 具体来说,here是他们提供示例的文件 .

    BrowseFragment 中需要一个新的 PageRowFragmentFactory ,它指定哪些片段映射到 HeaderItem . 像这样:

    @Override
        public Fragment createFragment(Object rowObj) {
            Row row = (Row)rowObj;
            mBackgroundManager.setDrawable(null);
            if (row.getHeaderItem().getId() == HEADER_ID_1) {
                return new SampleFragmentA();
            } else if (row.getHeaderItem().getId() == HEADER_ID_4) {
                return new WebViewFragment();
            }
            throw new IllegalArgumentException(String.format("Invalid row %s", rowObj));
        }
    

    你可以让上面的方法返回一个 RowsFragment 的实例,现在你将 RowsFragment 包含多个 ListRow 的映射到一个 HeaderItem .

    截至目前,您可以通过版本24.0.0的Leanback访问此优势,并在gradle文件中使用以下行:

    compile 'com.android.support:leanback-v17:24.0.0
    

    您可能会收到警告,但现在可以安全地忽略它 .

    Leanback的版本_1310672中还有很多其他非常酷的东西,如时髦的过渡动画和更干净的API . 它可以在我上面链接的示例项目中找到 . 还有一个talk from Google I/O涵盖了更多的附加内容 .

  • 18

    是否有支持多个列表行的演示者?

    从来没听说过 . 问题是BrowseFragment只接受子类 Row 的子节点 . 因此,BrowseFragment中的每个条目只能有单行(及其各自的 Headers ) .

    我正在考虑在每个项目中嵌入RowsFragment创建自定义演示者的行,如果我的方法错误,请纠正我 .

    正如我刚才提到的,我怀疑创建自定义演示者会有所帮助 .

    到目前为止,我能够提出的唯一解决方案是创建一个自定义版本的BrowseFragment(通过手动扩展 RowsFragmentHeadersFragment 类),以便它支持任何类型的片段 .

    如果你有兴趣,我写了一系列关于这个过程的文章https://medium.com/building-for-android-tv/

    和一个提供BrowseFragment https://github.com/dextorer/BuildingForAndroidTV自定义版本的基础项目

    我也在考虑编写一个库来简化这个自定义组件的使用 .

相关问题