2017-09-19 5 views
-2

Donc, je fais un écran avec Leanback's Browse Fragment et CardPresenter.Android TV: Comment notifier les éléments Card Presenter changer

intérieur de mon fragment qui s'étend BrowseFragment, j'ai une méthode pour dessiner l'interface utilisateur:

private void loadCardRows() { 
    mRowsAdapter = new CustomArrayObjectAdapter(new ListRowPresenter()); 

    final List<UiType> uiTypeList = new ArrayList<>(uiTypes); 

    for (UiType uiType : uiTypeList) { 
     HeaderItem cardPresenterHeader = new HeaderItem(0, uiType.getName()); 
     List<TypeReportItem> items = performUiTypeFiltering(uiType.getEndpointType()); 
     CardPresenter cardPresenter = new CardPresenter(attributesHelper); 
     CustomArrayObjectAdapter cardRowAdapter = new CustomArrayObjectAdapter(cardPresenter); 

     for (TypeReportItem item : items) { 
      cardRowAdapter.add(item); 
     } 

     mRowsAdapter.add(new ListRow(cardPresenterHeader, cardRowAdapter)); 

    } 
    setAdapter(mRowsAdapter); 
} 

Maintenant, je vais avoir un service qui charge des données toutes les quelques secondes. Ces données sont accessibles via attributesHelper que je passe à CardPresenter. Comment suis-je censé recharger ces données sans que l'écran ne clignote toutes les quelques secondes?

Répondre

2
mRowAdapter.notifyArrayItemRangeChanged(startingIndex, mRowAdapter.size()); 

indice de départ est celui dont la position de votre actualisent data.Dont donnent commencer quelque chose comme 0 index, ce qui se traduira par clignotement de l'écran de l'index 0

+0

Merci, mais le problème avec ceci est, l'écran clignote toutes les quelques secondes qui ne semble pas agréable:/ – joe

+0

C'est ce que vous verrez l'écran clignotant lorsque vous appelez la plage modifiée pour chaque article .. tout en donnant l'index de départ, spécifiez la position +1 après vos données visibles – Anonymous

+0

Oh .. ouais, j'ai mis l'index à 0. Mais comment puis-je obtenir la position puisque ce ArrayObjectAdapter ne fournit aucune méthode pour obtenir la position? – joe

0

Peut-être que ce anwser sera utile

for (int i = 0; i < mAdapter.size(); i++) { 
ListRow listRow = ((ListRow) mAdapter.get(i)); 
ArrayObjectAdapter listRowAdapter = ((ArrayObjectAdapter) listRow.getAdapter()); 
if (listRowAdapter.size() > 0) { 
    listRowAdapter.notifyArrayItemRangeChanged(0, listRowAdapter.size()); 
} 
} 

android tv -Reloading adapter data

J'ai utilisé ce code dans mon projet. Aucun clignotement n'est arrivé.