2

我想使用leaback库在Android TV中构建一个包含大量UI元素(1000个)的列表。我目前正在扩展 VerticalGridFragment 并使用 ArrayObjectAdapter。我想从绑定(比如说)100 个元素开始,然后在用户滚动到列表末尾时绑定接下来的 100 个元素。我看不到实现这种行为的方法。

VerticalGridFragment 提供了两个监听器:OnItemViewClickedListener 和 OnItemViewSelectedListener。在查询下一个 100 个元素之前,一直监听每个被选中的项目似乎非常昂贵。

有任何想法吗?谢谢。

4

1 回答 1

2

我能想到两种方法。首先是按照您的建议检查所选元素。这类似于我对这个 SO post 的回答。侦听器本身并不昂贵,只要您在侦听器中进行轻量级检查,那么它对性能的影响可以忽略不计。这种方法的缺点是,如果您使用的是触摸屏设备(向后运行),您将无法获取滚动位置,因为单独滚动不会触发项目选择。

选项1:

final int FETCH_NEXT_THRESHOLD = 5; // or NUM_COLUMNS * 2 if it's a grid
final ListRow listRow = (ListRow) row;
final ArrayObjectAdapter currentRowAdapter = listRow.getAdapter();
int selectedIndex = currentRowAdapter.indexOf(item);
if (selectedIndex != -1 && (currentRowAdapter.size() - index < FETCH_NEXT_THRESHOLD) {
    // One of the last FETCH_NEXT_THRESHOLD items was selected.
    // Trigger next page fetch now.
}

选项 2:

另一种方法依赖VerticalGridViewRecyclerView. 您可以使用类似于此类的东西。这将检查子元素的数量以及当前正在查看的元素。这对性能有更大的影响,因为它被更频繁地击中(但仍然是非常小的影响)。您可以通过ScrollListener在您VerticalGridFragment的 'sVerticalGridView中添加一个您最有可能必须在该Presenter级别执行的操作来实现此目的。

结论:

我建议使用选项 1,因为它更容易实现并且可以适应大多数用例。但如果您担心触摸屏设备运行后仰,您可能需要采用类似于选项 2 的方法。

于 2016-06-21T17:37:30.730 回答