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

时间:2015-07-03 08:25:46

标签: android custom-controls android-tv leanback

我开始使用Leanback支持我们的应用。 根据UI要求,我需要添加与每个标题对应的多个列表行,它与Youtube App在Android TV上的行列完全相同。默认 ListRowPresenter 似乎只呈现一个列表行及其标题。是否有任何支持多个列表行的演示者?我正在考虑在每个项目中嵌入RowsFragment创建自定义演示者的行,如果我的方法错误,请纠正我。enter image description here

2 个答案:

答案 0 :(得分:20)

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

HeaderItem中需要一个新的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)); } 的实例,现在您将RowsFragment包含多个RowsFragment地图,只有一个ListRow

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

HeaderItem

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

Leanback版本compile 'com.android.support:leanback-v17:24.0.0 中还有很多其他非常酷的东西,比如时髦的过渡动画和更干净的API。它可以在我上面链接的示例项目中找到。还有一个talk from Google I/O,涵盖了更多的内容。

答案 1 :(得分:7)

  

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

不是我知道的。问题是BrowseFragment只接受子类Row的子节点。因此,BrowseFragment中的每个条目只能有单行(及其各自的标题)。

  

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

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

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

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

以及提供BrowseFragment https://github.com/dextorer/BuildingForAndroidTV

自定义版本的基础项目

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