【问题标题】:Remove View from LinearLayout in Android issue从 Android 问题中的 LinearLayout 中删除视图
【发布时间】:2012-03-17 00:07:18
【问题描述】:

我创建了一个具有动态添加 ImageViews 的 LinearLayout。我可以有一个包含 50 个 ImageViews 的列表,但同时只会显示 3 个。

我需要引用其中的 3 个项目,因此我在名为 ImageView item1、item2、item3 的活动顶部设置了私有变量。

当一个按钮被按下时,列表中的下一个 ImageView 被添加到布局中并且第一个项目被移除。然后我重置了 item1、item2 和 item3 的引用。

我的问题是,虽然效果很好,但似乎存在绘画问题。 item3(最后一个 ImageView)将显示在前一个 ImageView 之上添加的新项目。这似乎是一个绘画问题,因为如果我将手机切换到横向模式,然后再回到纵向,问题就解决了。

编辑:我尝试将 .invalidate() 添加到布局和 imageViews 本身,但没有成功。

【问题讨论】:

  • 粘贴相关代码和截图
  • 为您的视图尝试invalidate() 方法,并通过将其可见性设置为View.GONE(如果它不为空)来确保您已删除的视图不再可见。
  • 而不是删除和替换视图。为什么不直接回收它们?意思不是移动实际视图,而是交换它们的内容。就像您在 ArrayAdapter 中所做的一样
  • 你是按这个顺序做的吧?添加新的,删除旧的,使布局无效。试试这个顺序。
  • @slayton 这是正确的解决方案,非常感谢。

标签: android


【解决方案1】:

那么尝试以这种方式使刷新成为引用。

    layout.removeAllViews();
    layout.refreshDrawableState();

然后将新的 3 个项目添加到 LinearLayout。希望这可以帮助。 :)

【讨论】:

  • 这是正确的做法。无需致电refreshDrawableState(),因为removeAllViews() 在内部执行requestLayout()invalidate(true)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多