Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android tv -Reloading adapter data

I want to re-load some of the rows data in a browse fragment.

Basically I want to reset the adapter data without causing a flash like effect in the browse fragment. Any idea how it can be done?

Something like notifyDataSetChanged() in list view.

Thanx

like image 652
prit Avatar asked Nov 23 '15 11:11

prit


3 Answers

This will refresh data without losing current position:

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());
    }
}
like image 67
Mario Velasco Avatar answered Nov 01 '22 11:11

Mario Velasco


You can create your own adapter and add a new replaceAll() method.

public void replaceAll(Collection items){
 int itemsCount = items.size();
 if (itemsCount == 0){
    return;
 }
 mItems.clear();
 mItems.addAll(index, items);
 notifyItemRangeChanged(0, itemsCount);
}

complete source:link

like image 25
ewilly Avatar answered Nov 01 '22 12:11

ewilly


I answered something similar in this question: Dynamically add more cards in a list Row android TV leanback

I'll copy my answer from there. Hopefully this helps.

To add items to a presenter;

CardPresenter channelCardPresenter = new CardPresenter();
ArrayObjectAdapter channelRowAdapter = new ArrayObjectAdapter(channelCardPresenter);
channelRowAdapter.add(new Movie("Movie Title"));
HeaderItem header = new HeaderItem(0, "My Channels");
mRowsAdapter.add(new ListRow(header, channelRowAdapter));

Of course this may only work for the first time you're creating the UI. Future times may not do this. In my app, CumulusTV, I create a method that will be called each time I want to do a full redraw of the app:

public void refreshUI() {
    prepareBackgroundManager();
    setupUIElements();
    loadRows(); //Generate and populate all the rows
    setupEventListeners();
}
like image 39
Nick Felker Avatar answered Nov 01 '22 12:11

Nick Felker