是否可以将 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 的子类?的主要内容,如果未能解决你的问题,请参考以下文章