所以,我正在使用Leanback的Browse Fragment和CardPresenter制作一个屏幕。
在扩展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访问该数据。我怎么能重新加载那些数据而不会导致屏幕每隔几秒闪烁一次?
答案 0 :(得分:3)
proxy_set_header X-Real-IP $remote_addr;
起始索引是您正在更新数据的位置。不要给起始索引类似于0,这将导致屏幕从索引0闪烁
答案 1 :(得分: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
我在我的项目中使用过这段代码。没有发生眨眼。
答案 2 :(得分:0)
notifyArrayItemRangeChanged
导致闪烁,所以试试这个适配器
class RefreshableArrayObjectAdapter(presenterSelector: PresenterSelector) :
ArrayObjectAdapter(presenterSelector) {
fun refresh() {
notifyChanged()
}
}