将元素动态加载到 ScrollView

Posted

技术标签:

【中文标题】将元素动态加载到 ScrollView【英文标题】:Dynamically load elements to a ScrollView 【发布时间】:2010-12-18 20:32:30 【问题描述】:

我正在尝试创建动态可滚动视图。它将保留从服务器下载的元素列表。该列表可能包含数千个元素。由于这个元素必须在向下滚动时下载到列表中,并且还应该从列表顶部删除以保持较低的内存使用率。我还需要能够将不同的视图设置为元素。

最好使用 ScrollView 还是 ListView?我将如何将元素添加到列表并控制何时下载更多元素?

我记得偶然发现了一个关于如何执行此操作的示例或教程。特别是关于如何在向下滚动时添加元素、删除顶部元素以及创建不同的 xml 视图以用作元素。我现在找不到这个示例教程。我认为这是关于如何在滚动范围时重用元素。

【问题讨论】:

【参考方案1】:

您应该使用 ListView,这正是它的用途,它完全按照您的描述进行。 :)

更多信息请参见:http://www.google.com/events/io/2010/sessions/world-of-listview-android.html

【讨论】:

【参考方案2】:

这是一个相当多部分的问题,但我也许可以帮助解决其中的一部分问题。您可以使用 ScrollView,我更喜欢这样做,因为它允许您定义任意数量的 UI 元素。

添加/删除元素

首先,我会为每个单独的列表元素创建一个 XML 布局。当你需要添加一个元素时,你可以像这样膨胀这个布局:

LinearLayout clone = (LinearLayout)View.inflate(this, R.layout.sample, null)

然后您可以通过访问您膨胀的 XML 中的小部件来设置元素的信息

clone.findViewById(R.id.NameSpace).setText("This is element Johnny")

我会将克隆的 ID 设置为随机生成的数字或某种增量索引并以某种方式存储该数字(即 Listint[]),将“旧”元素的 ID 保留在前面存储设备。然后,当您需要访问元素以删除它们时,您只需为第一个元素调用 ScrollView.removeView( findViewById( Storage.get(0) ) )

【讨论】:

ListView 已经将有限的窗口显示到更大的数据集中。您不需要或不想重新发明这个***。 :) 是的,但正如我在回答中所说,膨胀模板允许自定义视图,包括按钮、图像等。和独特的处理。它会更具视觉吸引力。 这正是 ListView 的作用。您实现了一个适配器,它为数据集中的每个位置返回自定义视图(通常从模板膨胀),并且一旦旧项目滚动出视图,您就有机会重用已经为不同位置膨胀的项目视图。

以上是关于将元素动态加载到 ScrollView的主要内容,如果未能解决你的问题,请参考以下文章

关于动态加载的数据实现单选可取消的效果 并且附带 ScrollView滑动到指定位置

在Angular ng-template中动态加载kendo ScrollView不起作用

如何使用 jquery 将动态创建的 img 元素加载到 HTML5 画布中

动态延迟加载网页元素jQuery插件scrollLoading

保存并加载动态创建的可拖动元素的位置(jQuery-UI)

页面滚动图片等元素动态加载插件jquery.scrollLoading.js