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

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

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

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

【问题讨论】:

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

标签: kotlin android-tv leanback


【解决方案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()) 解决了这个问题
猜你喜欢
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多