Leanback团队最近在库的版本24.0.0中添加了对一个HeaderItem的多个ListRow支持。这使您能够提供一个映射到HeaderItem的RowsFragment。在他们的Leanback展示中,您可以看到它的示例。特别地,在这里是提供示例的文件。
现在有一个新的PageRowFragmentFactory,您需要在BrowseFragment中使用它来指定哪些片段映射到哪些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));
}
你可以直接让上述方法返回一个RowsFragment
的实例,这样就会得到包含多个ListRow
映射到一个HeaderItem
的RowsFragment
。
现在,你只需在Gradle文件中添加以下行,即可通过Leanback的24.0.0版本获取此功能:
compile 'com.android.support:leanback-v17:24.0.0
你可能会收到警告,但现在可以安全地忽略它。
在Leanback的版本24.0.0
中还有很多其他非常酷的东西,比如时髦的转换动画和更干净的API。它们都可以在我上面提供链接的示例项目中找到。此外,还有来自Google I/O的演讲介绍了更多新功能的内容。
BrowseFragment
与 TitleView
进行通信实现的。这应该都可以自动完成。 - Kyle Venn有没有支持多个列表行的演示文稿?
据我所知,没有。问题在于BrowseFragment仅接受子类为Row
的对象。因此,每个BrowseFragment条目中只能有单个行(以及其各自的标题)。
我正在考虑创建一个自定义演示文稿,其中每个项目都嵌入了RowsFragment,如果我的方法不正确,请纠正我。
正如我刚才提到的,我怀疑创建一个自定义演示文稿是没有帮助的。
我迄今为止唯一想到的解决方案就是创建一个自定义版本的BrowseFragment(通过手动扩展RowsFragment
和HeadersFragment
类),使其支持任何类型的碎片。
如果您感兴趣,我写了一系列关于这个过程的文章https://medium.com/building-for-android-tv/
和一个提供定制版BrowseFragment的基础项目https://github.com/dextorer/BuildingForAndroidTV
我正在考虑编写一个库,以简化使用这个自定义组件的过程。