如何刷新安卓电视的 BrowseFragment?
如何刷新安卓电视的 BrowseFragment?
原文:https://medium.com/hackernoon/how-to-refresh-the-android-tv-browsefragment-6e4d2d3c6690
我在工作中遇到了一个严重的问题: 的 BrowseFragment 的行刷新项目时的闪烁效果。

source: https://developer.android.com/training/tv/playback/browse.html
介绍
在说问题的解决方法之前,先介绍一下 BrowseFragment 。 BrowseFragment 是用于创建媒体目录的片段。在媒体目录中,我们可以从左侧浏览类别,并在右侧选择所选类别的内容。媒体目录由一个 RowsFragment 和一个header fragment组成。一个 BrowseFragment 将它的 ObjectAdapter 的元素呈现为一个垂直列表中的一组行。

media catalog
现在,让我们假设我们希望通过后台任务每 5 秒钟刷新一次行片段的数据。 我们怎样才能做到呢?
第一种解决方案:只需更新适配器
BrowseFragment 使用 ArrayObjectAdapter 来显示数据。我们只需要: 1。清除适配器的项目(清除 ) 2。向适配器添加新项目( addAll )
问题:闪光效果

每次有刷新,片段就闪烁。闪烁效果是由适配器通知 UI 对项目的每个操作引起的。我们可以看到 clear()和 addAll()方法有一个通知方法 ArrayObjectAdapter 有一个通知方法:
public void clear() {
int itemCount = mItems.size();
if (itemCount == 0) {
return;
}
mItems.clear();
**notifyItemRangeRemoved(0, itemCount);** //notifies UI
}public void addAll(int index, Collection items) {
int itemsCount = items.size();
if (itemsCount == 0) {
return;
}
mItems.addAll(index, items);
**notifyItemRangeInserted(index, itemsCount);**//notifies UI
}
第二个解决方案:您自己的适配器:
我们可以创建自己的适配器,并选择何时以及如何通知项目的更改。
我用一个新的 replaceAll()方法创建了一个定制的 ObjectAdapter 。
public void replaceAll(Collection items){
int itemsCount = items.size();
if (itemsCount == 0){
return;
}
** mItems.clear();
mItems.addAll(index, items);
notifyItemRangeChanged(0, itemsCount);**
}
给我看看代码
全班都在这里:
参考资料:
在电视上运行的媒体应用程序需要允许用户浏览其内容,做出选择,并开始播放…
developer.android.com](https://developer.android.com/training/tv/playback/browse.html)
n E X T→记录我的安卓冒险
在你离开之前… 如果你喜欢这篇文章,你会喜欢订阅我的时事通讯。获取我的小抄:“AndroidStudio 键盘快捷键小抄”。