关于如何提高大型水平线性布局的性能,我有一个问题。
我正在创建一个类似于视图的表格,它可以有50到2,500个条目。每个条目都是一个LinearLayout,包含一个带有一些简单文本的TextView。我利用LinearListView库实现了该设计。此库允许将ListAdapter绑定到LinearLayout以水平或垂直方向显示视图。
我目前实现这一点的方式是利用其中的两个LinearListViews。一种是由水平LinearListViews构成的垂直的who数据。这通过创建一个表视图来提供所需的输出。然后,我用垂直ScrollView将表包装在水平ScrollView中,这样就可以平移表(向上/向下或向左/右滚动)。
这个布局的问题是,适配器getView()只有在视图的初始化时才会被调用(当它第一次膨胀第一个linearList时,它就会膨胀每个视图)。一旦每个视图都膨胀了,在滚动列表时,getView()方法就再也不会被调用了(当然,当它全部加载时,它滚动得非常好)。膨胀所需的总时间并不是很大,但是它会使表中的每一项都膨胀,这就锁定了主UI线程。我需要视图来“延迟加载”表中的每一项,而不阻塞UI线程。
我有一个屏幕截图,但我没有足够的声誉来张贴它,我也没有足够的使用两个链接。我将尝试在评论中添加一个外部照片链接。(在屏幕截图中)表数据是在一组异步任务中生成的,其中每个表项都是当前时间(毫秒)(我知道由于异步性质,表行没有排序,以后会修复)。这个实际的应用程序除了演示这个库之外,没有别的用途。
我添加了“更改数据随机”按钮,它将创建一个随机点(int,int )并生成一个随机字符串,并将(x,y)处的单元格替换为该字符串。这几乎是通过调用详情适配器的getView()方法立即实现的。因此,访问这张桌子是非常迅速的!同样,锁定主UI线程的是初始膨胀。
几个重要的说明要总结:
我已经找到了这个应用(电视SideView),它创建了一个相当大的表视图,可以很好地加载。我最终希望实现类似的目标(查看“程序指南”页面,查看实际的表)。它加载了一堆单元格,您仍然可以使用UI (当表第一次打开时,可以在它周围拖动,您将看到单元格加载)。
我会继续努力,把我发现的任何新东西都发回去。
任何建议和帮助都将不胜感激!非常感谢你抽出时间来!
-Evan
https://stackoverflow.com/questions/29018811
复制相似问题