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

Cod*_*ury 9 android custom-controls android-tv leanback

我开始使用Leanback支持我们的应用程序.根据UI要求,我需要添加与每个标题对应的多个列表行,这与Youtube App在Android TV上的行为完全相同.默认ListRowPresenter似乎只渲染一个列表行及其标题.是否有任何支持多个列表行的演示者?我正在考虑在每个项目中嵌入RowsFragment创建自定义演示者的行,如果我的方法错误,请纠正我.在此输入图像描述

Kyl*_*enn 20

Leanback团队最近在库的版本中增加了对多个ListRows的支持.它允许您提供映射到的.你可以在他们的Leanback展示中看到它的一个例子.具体来说,是他们提供示例的文件.HeaderItem24.0.0RowsFragmentHeaderItem

PageRowFragmentFactory您需要一个新的,BrowseFragment它指定哪些片段映射到哪些片段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));
    }
Run Code Online (Sandbox Code Playgroud)

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

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

compile 'com.android.support:leanback-v17:24.0.0
Run Code Online (Sandbox Code Playgroud)

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

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


Seb*_*ano 7

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

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

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

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

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

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

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

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