2012-06-18 14 views
6

Tôi có một ListView trên ứng dụng Android của mình mà tôi tự động thay đổi dữ liệu của. Tôi sử dụng phương thức onFilterComplete() để thay đổi nội dung của ListView.Danh sách ICS AndroidXem sự cố làm mới

Pre Ice Cream Sandwhich đoạn mã sau hoạt động tốt:

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

Tuy nhiên trên Ice Cream Sandwhich khi tôi sử dụng bộ lọc màn hình không được làm mới đúng, Nếu bộ lọc trả về một số các mục đó là nhỏ hơn so với ListView trước sau đó danh sách dữ liệu cũ dường như là vẫn còn nhìn thấy ở chế độ nền, theo ảnh chụp màn hình này:

enter image description here

Từ ảnh chụp màn hình bạn có thể thấy nơi entry đầu tiên trong ListView là, đây là tất cả những gì sẽ hiển thị, bạn có thể thấy nơi các kết quả trước vẫn còn nhìn thấy bên dưới, chúng chỉ hiển thị chúng không hoạt động như trong chúng không thể được khai thác, như thể màn hình không làm mới đúng cách .

Khi tôi chọn nút home rời khỏi ứng dụng thông qua màn hình chủ và trở lại tất cả mọi thứ dường như nó phải như trong ảnh chụp màn hình sau đây:

enter image description here

Có cái gì khác tôi phải thực hiện để làm mới đúng ListView trên Ice Cream Sandwhich? Có ai khác gặp phải vấn đề tương tự không?

Những gì tôi có hoạt động tốt trước ICS.

+0

Khi bạn nói "danh sách cũ", bạn thực sự chỉ có nghĩa là dữ liệu cũ trong bộ điều hợp, phải không? Hoặc có nhiều 'ListView' trên đầu trang của mỗi khác? –

+0

Xin lỗi có, ý tôi là dữ liệu được lọc cuối cùng trong bộ điều hợp, chỉ có một ListView trong bố cục và chỉ có một ListView trong mã, không nhiều., Khi tôi rời khỏi màn hình và trả về ListView xuất hiện như trong phần thứ hai ảnh chụp màn hình. –

+0

Như tôi thấy, bộ lọc nên đã gọi datasetChanged trên bộ điều hợp để bạn có thể không phải làm điều đó. Tôi không biết nếu điều này có thể giải thích vấn đề của bạn nhưng nó có giá trị bình luận và thử nó. –

Trả lời

0

Để sửa lỗi này tôi đã thay đổi mã của tôi như sau:

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

đâu decLayout là cách bố trí tương đối mà xem danh sách của tôi ngồi bên trong, điều này dường như để làm mới một cách chính xác màn hình khi danh sách những thay đổi xem dữ liệu.

Trong khi tác phẩm này tôi không chắc chắn 100% là bản sửa lỗi hợp lệ và tôi muốn nghe ý kiến ​​của bất kỳ ai khác có vấn đề tương tự như vậy và có thể khắc phục đúng.