#kotlin #android-tv #leanback
#kotlin #android-tv #откат
Вопрос:
Я хочу передать подкласс RowsSupportFragment подклассу BrowseSupportFragment, потому что мне нужно переопределить некоторые методы в RowsSupportFragment, чтобы изменить поведение RowsSupportFragment по умолчанию.
Например, чтобы всегда показывать заголовки строк, переопределив функцию setExpand() на true.
Тот же вопрос относится к подклассу HeadersSupportFragment.
Комментарии:
1. Что вы пробовали до сих пор?
2. Немного, потому что из того, что я вижу, нет способа переопределить класс RowsSupportFragment и передать его подклассу BrowseSupportFragment. Экземпляр RowsSupportFragment создается в BrowseSupportFragment фабрикой, члены являются частными, а внутренние классы являются окончательными. Сама платформа Leanback создает экземпляры RowsSupportFragment и HeadersSupportFragment и не дает вам возможности переопределять эти классы и передавать их подклассу BrowseSupportFragment. Вы можете редактировать только докладчиков, но вы не можете изменить поведение по умолчанию.
Ответ №1:
Не тестировал это, но я считаю, что это должно сработать.
В вашем BrowseSupportFragment
создайте пользовательский FragmentFactory
для вашего подкласса и переопределите существующее сопоставление списков следующим образом:
getMainFragmentRegistry().registerFragment(ListRow.class, new FragmentFactory<CustomRowsSupportFragment>() {
@Override
public CustomRowsSupportFragment createFragment(Object row) {
return new CustomRowsSupportFragment();
}
}
);
Комментарии:
1. MainFragmentAdapterRegistry является конечным классом, поэтому его нельзя расширить
2. @kamilp Нигде в моем ответе я ничего не говорю о расширении
MainFragmentAdapterRegistry
, я просто регистрирую в нем новый фрагмент.3. BrowseSupportFragment имеет закрытый элемент, который связывает его с частным MainFragmentAdapterRegistry mMainFragmentAdapterRegistry = new MainFragmentAdapterRegistry(); Нет установщика, поэтому его нельзя вызвать другим способом.
4. @kamilp Вам не нужно его устанавливать, вам просто нужно получить к нему доступ.
getMainFragmentRegistry()
является общедоступным.5. Работает, спасибо! mainFragmentRegistry.registerFragment(ListRow::class.java , CustomListRowFragmentFactory()) решает эту проблему