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