android电视 – 加载适配器数据

我想重新加载浏览片段中的一些行数据。基本上我想重置适配器数据,而不会导致在浏览片段中的Flash效果。任何想法如何能够完成。像列表视图notifyDataSetChanged() 。

感谢名单

这将刷新数据而不会丢失当前位置:

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

您可以创建自己的适配器并添加一个新的replaceAll()方法。

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

完整的来源: 链接

我在这个问题中回答了类似的问题: 在列表中添加更多卡片

我会从那里复制我的答案。 希望这有助于。

将项目添加到演示者;

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

当然,这可能只会在您第一次创建UI时起作用。 未来的时代可能不会这样做。 在我的应用程序, https://github.com/Fleker/CumulusTV/blob/e85b7aa153fcd7bb5d1b23127a8002f3a8204120/app/src/main/java/com/felkertech/n/tv/LeanbackFragment.java ,我创建一个方法,将被称为每次我想完整地重绘应用程序:

 public void refreshUI() { prepareBackgroundManager(); setupUIElements(); loadRows(); //Generate and populate all the rows setupEventListeners(); } 

这是@ ewilly答案的我的kotlin版本,只实现replaceAll ,我用它来初始化和增量更新列表。

 class RefreshableArrayObjectAdapter(presenter: Presenter): ObjectAdapter(presenter) { var items: ArrayList<Any> = arrayListOf() override fun isImmediateNotifySupported(): Boolean = true override fun size(): Int = items.size override fun get(position: Int): Any = items[position] fun replaceAll(list: Collection<Any>) { items.clear() items.addAll(0, list) notifyChanged() } }