列表视图行布局的动态更改也会影响其他行

时间:2013-02-01 02:19:50

标签: android listview listadapter

我正在使用ListView,每个列表元素上都有几个按钮。

当点击一行上的按钮时,该按钮应该消失。单击按钮时单击的按钮就会消失。问题是其他一些列表元素按钮也消失了。

例如,当我单击第一个元素按钮时,它也会影响第6,11,16个元素中的按钮。第7个元素按钮也影响第2,第12,第17个元素。

原因是适配器不为数据中的所有元素创建列表元素。它只会创建几个足以在屏幕上显示的对象。如图所示,当在列表中向下时,top元素成为最后一个,其值被更改。所以当我在第一个元素中隐藏按钮时,第8个元素中的按钮(数字来自图片)也被隐藏。

enter image description here

我可以避免使用已创建项目的副本并为每个元素创建新项目可能是解决方案,但在查看了这么多行后它会减慢应用程序。

我一直在找几个小时但找不到任何解决方案。我希望有人知道任何解决方案,或者至少建议我使用不同类型的适配器,实现或其他东西。

2 个答案:

答案 0 :(得分:1)

您应该跟踪显示或隐藏的每个元素按钮状态天气。在适配器的getView()方法中检查当前元素状态,然后相应地隐藏或显示按钮。使用此方法时,请务必将每个按钮状态设置为不应该隐藏的状态,以便在视图循环时,视图获取新项目状态而不是旧项目。

答案 1 :(得分:0)

Amal有你的部分答案。当您的适配器获取getview调用时,完全重新初始化重用的视图。

至于你的速度问题。听起来好像你希望你的适配器懒洋洋地加载它的数据。您加载该数据的速度很慢。有些东西必须给予。此问题的常见解决方案是在后台线程中加载数据。