android tv -Reloading适配器数据

时间:2015-11-23 11:32:35

标签: android-tv leanback

我想在浏览片段中重新加载一些行数据。

基本上我想重置适配器数据而不会在浏览片段中产生类似flash的效果。知道如何做到这一点吗?

列表视图中的notifyDataSetChanged()。

感谢名单

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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

完整来源:link

答案 2 :(得分:0)

这是@ 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()
    }
}

答案 3 :(得分:0)

  /**
 * Notify that the content of a range of items changed. Note that this is
 * not same as items being added or removed.
 *
 * @param positionStart The position of first item that has changed.
 * @param itemCount The count of how many items have changed.
 */
public void notifyArrayItemRangeChanged(int positionStart, int itemCount) {
    notifyItemRangeChanged(positionStart, itemCount);
}

通知一系列项目的内容发生了变化。请注意,这是  *与添加或删除的项目不同。

如果您想要添加或删除项目,请尝试this

1.mRowsAdapter.clear();
2.mRowsApdapter.addAll();