【问题标题】:Dynamic change on listview row layout affects other rows toolistview 行布局的动态更改也会影响其他行
【发布时间】:2013-02-01 02:19:50
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: android listview listadapter


    【解决方案1】:

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

    【讨论】:

    • 其实我不只是隐藏一个按钮。我还添加了新按钮并将新的投票菜单添加到该行。所以其他行也有投票菜单。看来我会处理每一行的状态并一次又一次地设置他们的视图。
    【解决方案2】:

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

    至于你的速度问题。听起来您希望您的适配器延迟加载其数据。您加载该数据的速度很慢。有些东西必须付出。此问题的常见解决方案是在后台线程中加载数据。

    【讨论】:

    • 我会尝试不使用线程。如果它变得非常慢,我会尝试使用线程。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多