[英]Android TV: How to notify Card Presenter items change
So, I'm making a screen with Leanback's Browse Fragment and CardPresenter.所以,我正在用 Leanback 的 Browse Fragment 和 CardPresenter 制作一个屏幕。
Inside my fragment that extends BrowseFragment, I have a method for drawing the UI:在扩展 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);
}
Now I'm having a service that loads some data every few seconds.现在我有一个服务,每隔几秒钟加载一些数据。 That data is reachable through attributesHelper that I'm passing to CardPresenter.. How am I supposed to reload that data without causing the screen to blink every few seconds?
该数据可通过我传递给 CardPresenter 的 attributesHelper 访问。我应该如何重新加载该数据而不导致屏幕每隔几秒闪烁一次?
mRowAdapter.notifyArrayItemRangeChanged(startingIndex, mRowAdapter.size());
起始索引是您更新数据的位置。不要给起始索引类似 0 的值,这会导致屏幕从索引 0 开始闪烁
Maybe this anwser will be helpful也许这个 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 android tv - 重新加载适配器数据
I have used this code in my project.我在我的项目中使用了这段代码。 No blink happened.
没有眨眼。
notifyArrayItemRangeChanged
caused blinking, so try this Adapter导致闪烁,所以试试这个适配器
class RefreshableArrayObjectAdapter(presenterSelector: PresenterSelector) :
ArrayObjectAdapter(presenterSelector) {
fun refresh() {
notifyChanged()
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.