我想使用leanback库在Android TV中构建一个包含大量UI元素(1000个)的列表。我目前正在扩展VerticalGridFragment并使用ArrayObjectAdapter。我想从绑定(比如说)100个元素开始,然后在用户到达滚动到列表末尾时绑定下100个元素。我看不到实现此行为的方法。
VerticalGridFragment提供了两个侦听器:OnItemViewClickedListener和OnItemViewSelectedListener。在查询下一个100个元素之前,不断聆听所选的每个项目似乎非常昂贵。
有任何想法吗?谢谢。
我可以想到两种方法。首先是按照您的建议检查选定的元素。这类似于我对此SO帖子的回答。侦听器本身并不昂贵,只要您在侦听器中进行轻量级检查,它对性能的影响就可以忽略不计。这种方法的缺点是,如果您使用触摸屏设备(正在运行倾斜回显),则您将无法选择滚动位置,因为仅滚动不会触发项目选择。
选项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:
另一种方法依赖于所VerticalGridView
支持的事实RecyclerView
。您可以使用类似于此类的东西。这将检查子元素的数量以及当前在查看哪个元素。这对性能有更大的影响,因为它受到的打击更频繁(但影响仍然很小)。您可以通过添加一个实现这个ScrollListener
你VerticalGridFragment
的VerticalGridView
,你会最有可能在做Presenter
水平。
结论:
我建议选择1,因为它更容易实现,并且可以容纳大多数用例。但是,如果您担心触摸屏设备运行向后倾斜,则可能需要采用与选项2类似的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句