2017-09-19 2 views
-2

Also mache ich einen Bildschirm mit Leanback Browse Fragment und CardPresenter.Android TV: Wie benachrichtigt man die Card Presenter Artikel ändern

In meinem Fragment, das BrowseFragment erstreckt, habe ich eine Methode für die UI-Zeichnung:

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); 
} 

Jetzt habe ich einen Dienst, der einige Daten alle paar Sekunden geladen. Diese Daten sind über AttributeHelper erreichbar, die ich an CardPresenter übergebe .. Wie soll ich diese Daten neu laden, ohne dass der Bildschirm alle paar Sekunden blinkt?

Antwort

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

Startindex ist derjenige, von welcher Position Ihre aktualisieren data.Dont wie 0 Startindex etwas geben, das im Bildschirm blinken aus dem Index führen 0

+0

Vielen Dank, aber das Problem dabei ist, der Bildschirm blinkt alle paar Sekunden, die nicht gut aussieht:/ – joe

+0

Das ist was .. Sie sehen den Bildschirm blinken, wenn Sie den Bereich für jeden Artikel aufgerufen..so Geben Sie beim Geben des Startindexes die Position +1 nach Ihren sichtbaren Daten an. – Anonymous

+0

Oh .. Ja, ich setze den Index auf 0. Aber wie kann ich die Position bekommen, da dieser ArrayObjectAdapter keine Methode zum Erhalten der Position bietet? – joe

0

Vielleicht wird dies anwser hilfreich sein

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

ich habe diesen Code in meinem Projekt verwendet. Kein Blinzeln ist passiert.

Verwandte Themen