10

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

4

2 回答 2

20

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

PageRowFragmentFactory您将需要一个新的,BrowseFragment它指定哪些 Fragments 映射到哪个HeaderItems。像这样:

    @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));
    }

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

截至目前,您可以通过 Leanback 的 24.0.0 版在您的 gradle 文件中使用以下行来获得这种好处:

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

您可能会收到警告,但现在可以放心地忽略它。

Leanback版本中还有很多其他非常酷的东西,24.0.0比如时髦的过渡动画和更简洁的 API。它都可以在我上面链接的那个示例项目中找到。还有一个来自 Google I/O 的演讲,其中涵盖了更多的新增内容。

于 2016-06-13T23:39:10.113 回答
7

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

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

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

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

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

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

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

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

于 2015-07-03T08:46:28.817 回答