2012-06-18 152 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%肯定它是一個有效的修復程序,我想聽到任何其他人有類似問題,並可能有適當的修復。