Android ICS ListView刷新问题

时间:2012-06-18 15:20:20

标签: 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之前做得很好。

1 个答案:

答案 0 :(得分: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%确定它是一个有效的修复程序,而且我希望听到其他任何有类似问题并且可能有适当解决方法的人。