Android ICS ListView刷新问题

Don*_*rty 6 android listview refresh android-ui android-4.0-ice-cream-sandwich

我的Android应用程序上有一个ListView,我动态地更改了它的数据.我使用该onFilterComplete()方法来更改ListView的内容.

预冰淇淋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);
    }
}});
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

从屏幕截图中你可以看到ListView中第一个条目的位置,这是应该可见的所有内容,你可以看到前面的结果在下面仍然可见,这些只是可见它们不起作用,因为它们不能被点击,就像屏幕没有正确刷新一样.

当我选择主页按钮以通过主屏幕离开应用程序并返回所有内容时,应如下面的屏幕截图所示:

在此输入图像描述

还有什么我必须实现以正确刷新Ice Cream Sandwhich上的ListView吗?有没有其他人遇到过类似的问题?

我在ICS之前做得很好.

Don*_*rty 0

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

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();
    }
}});
Run Code Online (Sandbox Code Playgroud)

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

虽然这有效,但我不能 100% 确定它是有效的修复,我想听听其他有类似问题的人的意见,并且可能有正确的修复。