是否可以将 RowsSupportFragment 的子类传递给 BrowseSupportFragment 的子类?

Posted

技术标签:

【中文标题】是否可以将 RowsSupportFragment 的子类传递给 BrowseSupportFragment 的子类?【英文标题】:Is it possible to pass sub-class of RowsSupportFragment to sub-class of BrowseSupportFragment? 【发布时间】:2019-08-28 02:56:02 【问题描述】:

我想传递一个 BrowseSupportFragment 子类的 RowsSupportFragment 子类,因为我需要重写 RowsSupportFragment 中的一些方法来改变 RowsSupportFragment 的默认行为。

例如,通过将 setExpand() 函数重写为 true 来始终显示行标题。

同样的问题也适用于 HeadersSupportFragment 的子类。

【问题讨论】:

到目前为止你尝试了什么? 不多,因为据我所知,没有办法覆盖 RowsSupportFragment 类并将其传递给 BrowseSupportFragment 的子类。 RowsSupportFragment 实例由工厂在 BrowseSupportFragment 中创建,成员是私有的,内部类是最终的。 Leanback 框架本身会创建 RowsSupportFragment 和 HeadersSupportFragment 的实例,并且不会为您提供覆盖这些类并将它们传递给子类 BrowseSupportFragment 的选项。您只能编辑演示者,但不能更改默认行为。 【参考方案1】:

尚未对此进行测试,但我相信它应该可以工作。

在您的 BrowseSupportFragment 中,为您的子类创建一个自定义 FragmentFactory 并覆盖现有的 ListRow 配对,如下所示:

getMainFragmentRegistry().registerFragment(ListRow.class, new FragmentFactory<CustomRowsSupportFragment>() 
            @Override
            public CustomRowsSupportFragment createFragment(Object row) 
                return new CustomRowsSupportFragment();
            
       
);

【讨论】:

MainFragmentAdapterRegistry 是最终类,因此无法扩展 @kamilp 在我的回答中我没有说任何关于扩展MainFragmentAdapterRegistry,我只是向它注册一个新片段。 BrowseSupportFragment 具有绑定它的私有成员 private MainFragmentAdapterRegistry mMainFragmentAdapterRegistry = new MainFragmentAdapterRegistry();没有setter,所以不能以其他方式调用。 @kamilp 你不需要设置它,你只需要访问它。 getMainFragmentRegistry() 是公开的。 工作,谢谢! mainFragmentRegistry.registerFragment(ListRow::class.java, CustomListRowFragmentFactory()) 解决了这个问题

以上是关于是否可以将 RowsSupportFragment 的子类传递给 BrowseSupportFragment 的子类?的主要内容,如果未能解决你的问题,请参考以下文章

焦点没有移出 RowsSupportFragment

Leanback 创建不同的自定义行视图

是否可以将持久底片作为片段?

是否可以将对象设置为空?

是否可以将 MPMoviePlayerController 静音?

是否可以将数据传递给css文件?