Inizio con il supporto Leanback per la nostra app. Come per i requisiti dell'interfaccia utente, devo aggiungere più righe di elenco corrispondenti a ciascuna intestazione, è esattamente come l'app YouTube fa su Android TV. L'impostazione predefinita ListRowPresenter sembra rendere solo una riga di elenco e la relativa intestazione. Esiste un relatore che supporta più righe di elenco? Sto pensando alle linee che creano un presentatore personalizzato con RowsFragment incorporato in ciascun elemento, correggimi se il mio approccio è sbagliato. Multiple ListRows per ogni intestazione su BrowseFragment - Libreria Leanback
risposta
Il team Leanback ha recentemente aggiunto il supporto per più ListRow
s per uno HeaderItem
nella versione 24.0.0
della libreria. Ti consente di fornire un RowsFragment
che esegue il mapping allo HeaderItem
. Puoi vederne un esempio nel loro Leanback showcase. Nello specifico, here è il file in cui forniscono un esempio.
C'è un nuovo che è necessario nel proprio BrowseFragment
, che specifica a quale mappa dei frammenti corrisponde HeaderItem
s. In questo modo:
@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));
}
Si può solo avere il metodo di cui sopra restituire un'istanza di un RowsFragment
e ora avrete la RowsFragment
che contiene più ListRow
s mappa per un solo HeaderItem
.
A partire da ora è possibile ottenere l'accesso a questa bontà fino alla versione 24.0.0 di Leanback con la linea di seguito nel file Gradle:
compile 'com.android.support:leanback-v17:24.0.0
si potrebbe ottenere un avvertimento, ma per ora può essere sicuro ignorato.
C'è anche un sacco di altre cose davvero interessanti nella versione 24.0.0
di Leanback come animazioni di transizione snazzy e API più pulite. Tutto può essere trovato in quel progetto di esempio che ho linkato sopra. C'è anche un talk from Google I/O che copre più delle aggiunte.
Questa dovrebbe essere la risposta accettata. –
Esiste un relatore che supporta più righe di elenco?
Non che io sappia. Il problema è che BrowseFragment accetta solo i bambini che sottoclasse . Per questo motivo, possono essere presenti solo righe singole (e le rispettive intestazioni) per ogni voce in BrowseFragment.
Sto pensando sulle linee che creano un presentatore personalizzato con RowsFragment incorporato in ogni voce, mi corregga se il mio approccio è sbagliato.
Come ho appena detto, dubito che la creazione di un presentatore personalizzato sarebbe d'aiuto.
L'unica soluzione che sono riuscito a fare finora è semplicemente la creazione di una versione personalizzata di BrowseFragment (estendendo manualmente le classi RowsFragment
e HeadersFragment
in modo che supporti qualsiasi tipo di frammento.
Se siete interessati, ho scritto una serie di articoli sul processo https://medium.com/building-for-android-tv/
e un progetto di base che offre la versione personalizzata di BrowseFragment https://github.com/dextorer/BuildingForAndroidTV
Sto considerando anche scrivendo una libreria facilitare l'uso di questo componente personalizzato.
Perfetto, hai appuntito la soluzione del mio problema. Mi sono piaciuti tutti i tuoi articoli su Android TV, mi ha risparmiato un sacco di ore di ispezione del codice sorgente. – CodeFury
Dextor, qualsiasi lead per creare un frammento di dettagli personalizzati con UI (Two Header Item) sarebbe davvero utile. – Krishnakant
Solo una nota: potresti voler controllare la mia risposta qui sotto. La versione più recente di Leanback risolve questo problema: http://stackoverflow.com/a/37800789/1759443 –