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

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


person CodeFury    schedule 03.07.2015    source источник
comment
Просто примечание - вы можете проверить мой ответ ниже. Новейшая версия Leanback решает эту проблему: stackoverflow.com/a/37800789/1759443   -  person Kyle Venn    schedule 08.08.2016


Ответы (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, который содержит несколько карт ListRows только для одного HeaderItem.

На данный момент вы можете получить доступ к этому совершенству через версию 24.0.0 Leanback с помощью следующей строки в вашем файле gradle:

compile 'com.android.support:leanback-v17:24.0.0

Вы можете получить предупреждение, но пока его можно смело игнорировать.

В версии 24.0.0 Leanback также есть множество других действительно крутых вещей, таких как шикарная анимация перехода и более чистые API. Все это можно найти в том примере проекта, на который я ссылался выше. Существует также выступление Google I/O, в котором рассказывается о других дополнениях.

person Kyle Venn    schedule 13.06.2016
comment
@Kyle Venn: я сделал то же самое, что и пример проекта выше, но кнопка поиска не скрывалась автоматически. (Изображение: i.imgur.com/mCeCj0o.png) Вы можете мне помочь? Вы можете помочь мне ? - person MrSiro; 23.04.2018
comment
@MrSiro, я рад взглянуть, но я буду более полезен, если увижу ваш код. Можете ли вы открыть новый вопрос о переполнении стека со своим кодом и предоставить мне ссылку? Скрытие и показ происходит через BrowseFragment разговор с TitleView. И все это должно работать автоматически. - person Kyle Venn; 23.04.2018
comment
@KyleVenn: я решил проблему. Спасибо. Можете ли вы помочь с ошибкой по адресу: stackoverflow.com/questions /48576744/ - person MrSiro; 24.04.2018

Есть ли какой-либо докладчик, который поддерживает несколько строк списка?

Не то, что я знаю о. Проблема в том, что BrowseFragment принимает только дочерние элементы подкласса Row. По этой причине для каждой записи в BrowseFragment могут быть только отдельные строки (и соответствующие им заголовки).

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

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

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

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

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

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

person Sebastiano    schedule 03.07.2015
comment
Отлично, вы указали решение моей проблемы. Мне понравились все ваши статьи об Android TV, они сэкономили мне массу часов проверки исходного кода. - person CodeFury; 04.07.2015
comment
Dextor, Любое руководство по созданию фрагмента пользовательских сведений с другим пользовательским интерфейсом (элемент с двумя заголовками) было бы очень полезно. - person Krishnakant; 01.12.2015