Я начинаю работу с поддержкой Leanback для нашего приложения. В соответствии с требованиями пользовательского интерфейса мне нужно добавить несколько строк списка, соответствующих каждому заголовку, это точно так же, как приложение Youtube на Android TV. По умолчанию ListRowPresenter отображает только одну строку списка и ее заголовок. Есть ли какой-либо докладчик, который поддерживает несколько строк списка? Я думаю о создании пользовательского презентера с RowsFragment, встроенным в каждый элемент, поправьте меня, если мой подход неверен.
Несколько ListRows для каждого заголовка в BrowseFragment — библиотека Leanback
Ответы (2)
Команда Leanback недавно добавила поддержку нескольких ListRow
для одного HeaderItem
в версии 24.0.0
библиотеки. Это позволяет вам предоставить RowsFragment
, который сопоставляется с HeaderItem
. Вы можете увидеть пример этого в их витрине Leanback. В частности, вот файл, в котором они предоставляют пример.
В вашем BrowseFragment
есть новый PageRowFragmentFactory
, который указывает, какие фрагменты сопоставляются с какими HeaderItem
. Вот так:
@Override
public Fragment createFragment(Object rowObj) {
Row row = (Row)rowObj;
mBackgroundManager.setDrawable(null);
if (row.getHeaderItem().getId() == HEADER_ID_1) {
return new SampleFragmentA();
} else if (row.getHeaderItem().getId() == HEADER_ID_4) {
return new WebViewFragment();
}
throw new IllegalArgumentException(String.format("Invalid row %s", rowObj));
}
Вы можете просто сделать так, чтобы описанный выше метод возвращал экземпляр RowsFragment
, и теперь у вас будет RowsFragment
, который содержит несколько карт ListRow
s только для одного HeaderItem
.
На данный момент вы можете получить доступ к этому совершенству через версию 24.0.0 Leanback с помощью следующей строки в вашем файле gradle:
compile 'com.android.support:leanback-v17:24.0.0
Вы можете получить предупреждение, но пока его можно смело игнорировать.
В версии 24.0.0
Leanback также есть множество других действительно крутых вещей, таких как шикарная анимация перехода и более чистые API. Все это можно найти в том примере проекта, на который я ссылался выше. Существует также выступление Google I/O, в котором рассказывается о других дополнениях.
BrowseFragment
разговор с TitleView
. И все это должно работать автоматически.
- person Kyle Venn; 23.04.2018
Есть ли какой-либо докладчик, который поддерживает несколько строк списка?
Не то, что я знаю о. Проблема в том, что BrowseFragment принимает только дочерние элементы подкласса Row
. По этой причине для каждой записи в BrowseFragment могут быть только отдельные строки (и соответствующие им заголовки).
Я думаю о создании собственного презентера с RowsFragment, встроенным в каждый элемент, поправьте меня, если мой подход неверен.
Как я только что упомянул, я сомневаюсь, что создание пользовательского презентера поможет.
Единственное решение, которое мне пока удалось найти, — это просто создать пользовательскую версию BrowseFragment (путем ручного расширения классов RowsFragment
и HeadersFragment
), чтобы она поддерживала фрагменты любого типа.
Если вам интересно, я написал серию статей о процессе https://medium.com/building-for-android-tv/
и базовый проект, предлагающий пользовательскую версию BrowseFragment https://github.com/dextorer/BuildingForAndroidTV.
Я также рассматриваю возможность написания библиотеки, чтобы упростить использование этого пользовательского компонента.