2012-06-18 142 views
6

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

预冰淇淋三明治下面的代码工作正常:

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

然而冰淇淋三明治当我使用过滤器的屏幕不会在刷新正确,如果过滤器返回的条目数是比以前的ListView较小然后将旧表的数据似乎仍然可见的背景下,按照这个屏幕截图:

enter image description here

从屏幕截图,你可以看到在第一项ListView是,这应该是可见的,你可以看到之前的结果在底下仍然可见,这些只是可见的,它们不起作用,因为它们无法被窃听,就好像屏幕没有正确刷新。

当我选择home键离开通过主屏幕上的应用程序并返回看来一切,因为它应该在下面的屏幕截图:

enter image description here

有没有别的东西,我得落实正确刷新冰淇淋Sandwich上的ListView?有没有其他人遇到类似的问题?

我在ICS前工作得很好。

+0

当你说“旧的listview”时,你真的只是指适配器中的旧数据,对吧?或者有多个'ListView'在彼此之上? –

+0

对不起,我的意思是适配器中最后一次过滤的数据,在布局中只有一个ListView,并且只有一个ListView在代码中,而不是多个。当我离开屏幕并返回ListView时,它应该在第二个屏幕截图。 –

+0

正如我所见,过滤器应该已经在适配器上调用了datasetChanged,因此您可能不必这样做。我不知道这是否可以解释您的问题,但值得注释和尝试。 –

回答

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%肯定它是一个有效的修复程序,我想听到任何其他人有类似问题,并可能有适当的修复。