首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用适配器有效地膨胀多个水平LinearLayout中的许多视图

使用适配器有效地膨胀多个水平LinearLayout中的许多视图
EN

Stack Overflow用户
提问于 2015-03-12 19:39:32
回答 3查看 1.4K关注 0票数 2

关于如何提高大型水平线性布局的性能,我有一个问题。

我正在创建一个类似于视图的表格,它可以有50到2,500个条目。每个条目都是一个LinearLayout,包含一个带有一些简单文本的TextView。我利用LinearListView库实现了该设计。此库允许将ListAdapter绑定到LinearLayout以水平或垂直方向显示视图。

我目前实现这一点的方式是利用其中的两个LinearListViews。一种是由水平LinearListViews构成的垂直的who数据。这通过创建一个表视图来提供所需的输出。然后,我用垂直ScrollView将表包装在水平ScrollView中,这样就可以平移表(向上/向下或向左/右滚动)。

这个布局的问题是,适配器getView()只有在视图的初始化时才会被调用(当它第一次膨胀第一个linearList时,它就会膨胀每个视图)。一旦每个视图都膨胀了,在滚动列表时,getView()方法就再也不会被调用了(当然,当它全部加载时,它滚动得非常好)。膨胀所需的总时间并不是很大,但是它会使表中的每一项都膨胀,这就锁定了主UI线程。我需要视图来“延迟加载”表中的每一项,而不阻塞UI线程。

我有一个屏幕截图,但我没有足够的声誉来张贴它,我也没有足够的使用两个链接。我将尝试在评论中添加一个外部照片链接。(在屏幕截图中)表数据是在一组异步任务中生成的,其中每个表项都是当前时间(毫秒)(我知道由于异步性质,表行没有排序,以后会修复)。这个实际的应用程序除了演示这个库之外,没有别的用途。

我添加了“更改数据随机”按钮,它将创建一个随机点(int,int )并生成一个随机字符串,并将(x,y)处的单元格替换为该字符串。这几乎是通过调用详情适配器的getView()方法立即实现的。因此,访问这张桌子是非常迅速的!同样,锁定主UI线程的是初始膨胀。

几个重要的说明要总结:

  • UI需要采用表格格式,其中每行可以有不同的长度,并且可以动态更改。项目可以从任何部分删除和添加。
  • 我的getView()方法(2个适配器和2个LinearListViews)正在使用ViewHolder模式,并且进行了相当优化。
  • 我的主要目标不一定是提高总速度,而是有效地加载每个视图,这样主UI线程就不会被锁定(我希望仍然能够在表加载时使用接口)。
  • 为了简单起见,将每个单元格的内容视为文本视图(稍后可以支持图像和其他复杂组件)。
  • 该表需要能够向任何方向滚动(不可能一次在屏幕上显示其所有内容)。

我已经找到了这个应用(电视SideView),它创建了一个相当大的表视图,可以很好地加载。我最终希望实现类似的目标(查看“程序指南”页面,查看实际的表)。它加载了一堆单元格,您仍然可以使用UI (当表第一次打开时,可以在它周围拖动,您将看到单元格加载)。

我会继续努力,把我发现的任何新东西都发回去。

任何建议和帮助都将不胜感激!非常感谢你抽出时间来!

-Evan

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29018811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档