我开始使用Leanback支持我们的应用。 根据UI要求,我需要添加与每个标题对应的多个列表行,它与Youtube App在Android TV上的行列完全相同。默认 ListRowPresenter 似乎只呈现一个列表行及其标题。是否有任何支持多个列表行的演示者?我正在考虑在每个项目中嵌入RowsFragment创建自定义演示者的行,如果我的方法错误,请纠正我。
答案 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(通过手动扩展RowsFragment
和HeadersFragment
类),以便它支持任何类型的片段
如果你有兴趣,我写了一系列关于这个过程的文章 https://medium.com/building-for-android-tv/
以及提供BrowseFragment https://github.com/dextorer/BuildingForAndroidTV
自定义版本的基础项目我还在考虑编写一个库来简化这个自定义组件的使用。