【问题标题】:ListActivity list does not refresh properly when in full screen?ListActivity 列表在全屏时无法正确刷新?
【发布时间】:2011-02-07 15:31:50
【问题描述】:

我正在使用 ListActivity 来显示图标化列表(使用 BaseAdapter 的自定义实现)。它无法正确重新加载数据。当我更改适配器的内容并通知列表时,似乎旧数据绘制在新数据之上,直到发生滚动事件。旧行绘制在新行之上,但当我开始滚动时旧行消失了。

但是,如果我将 ListActivity 样式设置为 Theme.Dialog,它会很好地刷新。 (大概是因为在对话框中,每次列表内容更改时活动都会调整大小,这会强制重绘整个视图层次结构?)

任何想法如何在我的全屏活动中进行这项工作?

谢谢。

【问题讨论】:

    标签: android listview


    【解决方案1】:

    您是否尝试在您的 listView 上调用 invalidate()?

    这里有一些你可以尝试的功能:

    invalidate()
    requestLayout()
    forceLayout()
    

    当你的东西被图标化时,你甚至可以这样做(我不完全是你的意思)。您可以将视图的适配器设置为 null 或空适配器。一些空的东西足以不让你的活动崩溃。然后,当您想显示您的 ListView 时,只需将适配器设置回它即可。

    这可能与绘图缓存相关联,但如果您能提供更多信息就更好了。

    【讨论】:

    • 是的,我已经尝试过 invalidate() 和 invalidateViews() (都来自 ui 线程)。
    • 在onRestart()中清除listview的内容。您是否尝试过 notifyDataSetChaned()。
    【解决方案2】:

    奇怪的是,如果我设置了背景颜色,一切都会正确刷新。如果没有背景颜色,我会得到我在原始帖子中描述的刷新问题。

    【讨论】:

    • 似乎合乎逻辑。如果你有背景颜色,它会强制重绘所有内容。但是,如果您有透明的背景,则可能会出现问题。您是否尝试将颜色设置为不可见的东西。颜色#00ffffff
    • 知道如何强制它在没有背景的情况下重绘吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多