6

我的 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,则旧列表数据在后台似乎仍然可见,根据此屏幕截图:

在此处输入图像描述

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

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

在此处输入图像描述

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

我在 ICS 之前工作得很好。

4

1 回答 1

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();
    }
}});

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

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

于 2012-06-18T16:08:22.053 回答