Несколько ListRows для каждого заголовка в библиотеке BrowseFragment-Leanback

Я начинаю работу с поддержкой Leanback для нашего приложения. В соответствии с требованиями пользовательского интерфейса мне нужно добавить несколько строк списка, соответствующих каждому заголовку, это точно так же, как приложение Youtube на Android TV. По умолчанию ListRowPresenter похоже, что отображается только одна строка списка и ее заголовок. Есть ли презентатор, который поддерживает несколько строк списка? Я думаю о строках, создающих пользовательский презентатор с rowsfragment, встроенным в каждый элемент, исправьте меня, если мой подход неправильный.enter image description here

2 ответов


команда Leanback недавно добавила поддержку нескольких ListRows для одного HeaderItem в версии 24.0.0 библиотеки. Это позволяет поставить RowsFragment, что соответствует HeaderItem. Вы можете увидеть пример этого в их Leanback showcase. В частности, здесь - это файл, в котором они предоставляют пример.

есть новый PageRowFragmentFactory что вам понадобится в вашем BrowseFragment, который указывает, какие фрагменты карты, которые HeaderItems. Как Итак:

    @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 принимает только детей, которые подкласс Row. По этой причине для каждой записи в BrowseFragment могут быть только отдельные строки (и их соответствующие заголовки).

Я думаю о линиях, создающих пользовательский презентатор с RowsFragment, встроенный в каждый элемент, исправьте меня, если мой подход неправильный.

как я только что упомянул, я сомневаюсь, что создание пользовательского докладчика поможет.

единственное решение, которое я смог придумать до сих пор, это просто создать пользовательскую версию BrowseFragment (вручную расширяя RowsFragment и HeadersFragment классов), так что он поддерживает любой тип осколков.

Если вам интересно, я написал серию статей о процессе https://medium.com/building-for-android-tv/

и базовый проект, который предлагает пользовательскую версию BrowseFragment https://github.com/dextorer/BuildingForAndroidTV

Я также рассматриваю возможность написания библиотеки для облегчения использования этого пользовательского компонента.