Android 如何使只有一行的BrowseFragment可见

Android 如何使只有一行的BrowseFragment可见,android,android-tv,Android,Android Tv,我如何才能使Android TV BrowseFragment界面像YouTube应用程序一样只有一行可见 这是我的代码的基本结构: BrowseFragment-BrowseFragment=BrowseFragment.getInstance(); browseFragment.SetHeaderState(已启用browseFragment.HEADERS); setTitle(getString(R.string.AplicationName)); browseFragment.set

我如何才能使Android TV BrowseFragment界面像YouTube应用程序一样只有一行可见

这是我的代码的基本结构:

BrowseFragment-BrowseFragment=BrowseFragment.getInstance();
browseFragment.SetHeaderState(已启用browseFragment.HEADERS);
setTitle(getString(R.string.AplicationName));
browseFragment.setBadgeDrawable(ContextCompat.getDrawable(this,R.drawable.badge));
ArrayObjectAdapter rowsAdapter=新的ArrayObjectAdapter(新的ListRowPresenter());
对于(int i=0;i
这将生成左侧的所有标题,但不是一行可见的项目,而是一个包含所有行的网格,如示例应用程序:


您可以使用此处提供的自定义BrowseFragment组件

您将能够复制YouTube电视应用程序提供的相同UI结构


更新

我已经编写了一个简单的库,它扩展了Leanback,并提供了一个更加精简(和可靠)的定制。这是:


我所做的是扩展ListRowPresenter类(例如:ListVideosRowPresenter),并添加以下代码:

@Override
protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {
    super.onSelectLevelChanged(holder);

    if (vh.isSelected()){
        vh.getGridView().setVisibility(View.VISIBLE);
    } else {
        vh.getGridView().setVisibility(View.GONE);
    }
}
然后,在MainFragment类上,创建适配器(HeadersAdapters和RowsAdapters)时,必须使用扩展类:

mHeadersAdapter = new ArrayObjectAdapter(new ListVideosRowPresenter());
为了避免显示标题,(在rowsFragment上),我必须创建两个独立的适配器(一个用于HeadersFragment,另一个用于rowsFragment):

最后在MainFragment上编写一个新的setAdapter方法(带有两个参数):

public void setAdapter(ObjectAdapter adapterHeaders, ObjectAdapter adapterRows) {
    //this line sets the same adapter for both fragments (headers and rows)
    setAdapter(adapterRows);
    //this line sets the adapter for the HeadersFragment only
    getHeadersFragment().setAdapter(adapterHeaders);
}

您会发现BrowseFragment类(包含在leanback库中)对如何自定义HeaderFragment和RowsFragment的提示和说明进行了注释。您必须扩展MainFragmentAdapterRegistry类。如何实现此目的?我想尝试您的方法,但ListRowPresenter类不是在Leanback库中吗?你是如何延长课程的?你必须重新编译、编辑和重新编译吗?嗨。这是我几年前写的答案。在那个时候,您(作为程序员)能够扩展那个类,也可以检查代码。(只需站在它们上方,按ctrl键并单击)最美好的祝愿!我可以检查ListRowPresenter的代码,但无法编辑它,因为它已锁定。我几天前才开始android开发,所以我真的不知道如何扩展Leanback类。是否打开新的java文件?如果是,我应该把这个文件放在哪里?在原始的Leanback库中?好的,您必须编写一个扩展“ListRowPresenter”的新类,并重写这些方法(只是上面答案中列出的方法)。如果你对如何扩展一门课有疑问,只要上网查一下就可以了,有很多例子。然后按照上面列出的其他步骤进行操作。德纳达,朋友@塞巴斯蒂安科拉迪,你能帮我吗。谢谢
public void setAdapter(ObjectAdapter adapterHeaders, ObjectAdapter adapterRows) {
    //this line sets the same adapter for both fragments (headers and rows)
    setAdapter(adapterRows);
    //this line sets the adapter for the HeadersFragment only
    getHeadersFragment().setAdapter(adapterHeaders);
}