【问题标题】:How to implement a large single list efficiently in android TV using leanback library如何使用leanback库在android TV中有效地实现大单列表
【发布时间】:2016-06-20 22:40:49
【问题描述】:

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

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

有什么想法吗?谢谢。

【问题讨论】:

    标签: android-arrayadapter android-tv vertical-scroll


    【解决方案1】:

    我能想到两种方法。首先是按照您的建议检查所选元素。这类似于我的回答to this 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 支持的事实。你可以使用类似于this class 的东西。这将检查子元素的数量以及当前正在查看的元素。这对性能有更大的影响,因为它被更频繁地击中(但仍然是非常小的影响)。您可以通过将ScrollListener 添加到您的VerticalGridFragmentVerticalGridView 来实现此目的,您很可能必须在Presenter 级别执行此操作。

    结论:

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

    【讨论】:

    • 谢谢,在阅读了您的两个选项后,我也倾向于选项 1。
    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 2020-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多