Android ICS ListView 刷新问题

标签 android listview refresh android-4.0-ice-cream-sandwich android-ui

我的 Android 应用程序上有一个 ListView,我可以动态更改其数据。我使用 onFilterComplete() 方法来更改 ListView 的内容。

Pre Ice Cream Sandwhich 以下代码运行良好:

if(adapter != null) {

  adapter.notifyDataSetInvalidated();
  lview3.invalidateViews();

  adapter.getFilter().filter(aa1.getItem(item), new Filter.FilterListener() {
  public void onFilterComplete(int count) {
    adapter.notifyDataSetChanged();

    if(lview3.getCount() == 0){
      lview3.setVisibility(View.GONE);                                     
    }
    else{
      lview3.setVisibility(View.VISIBLE);
    }
}});

但是在 Ice Cream Sandwhich 上,当我使用过滤器时,屏幕没有正确刷新,如果过滤器返回的条目数小于之前的 ListView,那么旧列表数据在后台似乎仍然可见,根据这个屏幕截图:

enter image description here

从屏幕截图中,您可以看到 ListView 中的第一个条目在哪里,这就是应该可见的所有内容,您可以看到以前的结果在下面仍然可见的地方,这些只是可见的,它们并不像在它们中那样起作用无法点击,就好像屏幕没有正常刷新一样。

当我通过主屏幕选择主页按钮离开应用程序并返回时,一切都如以下屏幕截图所示:

enter image description here

我还需要执行其他操作才能正确刷新 Ice Cream Sandwhich 上的 ListView 吗?还有其他人遇到过类似的问题吗?

我所拥有的在 ICS 之前运行良好。

最佳答案

为了解决这个问题,我将代码更改为以下内容:

if(adapter != null) {
  adapter.getFilter().filter(aa1.getItem(item), new Filter.FilterListener() {
  public void onFilterComplete(int count) {
    adapter.notifyDataSetChanged();

    if(lview3.getCount() == 0){
      lview3.setVisibility(View.GONE);                                     
    }
    else{
      lview3.setVisibility(View.VISIBLE);
      decLayout.invalidate();
    }
}});

其中 decLayout 是我的 ListView 所在的相对布局,这似乎在 ListView 数据更改时正确刷新屏幕。

虽然这有效,但我不能 100% 确定它是一个有效的修复程序,我想听听任何其他遇到类似问题并且可能有适当修复程序的人的意见。

关于Android ICS ListView 刷新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11085888/

相关文章:

android - 从 View 中获取错误位置

java - Android:在 ListView header 中设置文本

javascript - HTML5 Canvas 在绘图时闪烁

Java - 信号事件模式

android - 使用 IF 条件改变 imageview

android - 如何使用自定义适配器和 ListView 获取复选框值

javascript - 了解浏览器刷新或 F5 已按下的方法

android - Android Studio构建错误:防火墙阻止gradle访问Studio

c# - 在 Android 中调用 .Net Web 服务失败

javascript - 如何使用 JS 停止自动刷新