2017-09-19 63 views
-2

因此,我正在使用Leanback的Browse Fragment和CardPresenter製作屏幕。Android TV:如何通知卡片演示者項目變更

在我的片段延伸BrowseFragment,我繪製UI的方法:

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

現在我有一個加載每隔幾秒鐘一些數據的服務。該數據可通過我傳遞給CardPresenter的attributesHelper訪問。我應該如何重新加載該數據而不會導致屏幕每隔幾秒閃爍一次?

回答

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

開始指數是一個從哪個位置你正在更新data.Dont給起始索引像0,這將導致屏幕閃爍,從指數0

+0

謝謝,但問題是,屏幕每隔幾秒閃爍一次,看起來不太好:/ – joe

+0

那就是什麼......當你調用每個項目的範圍時,你會看到屏幕閃爍。同時給起始索引指定位置+1後,您的可見數據 – Anonymous

+0

哦..是的,我將索引設置爲0.但是,我怎麼能得到的位置,因爲此ArrayObjectAdapter不提供任何獲取位置的方法? – joe

0

也許這anwser將有助於

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

我已經在我的項目中使用此代碼。沒有眨眼。