【发布时间】:2012-06-20 14:27:17
【问题描述】:
我的 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 之前,我的工作正常。
【问题讨论】:
-
当您说“旧列表视图”时,您实际上只是指适配器中的旧数据,对吗?还是有多个
ListViews 重叠在一起? -
对不起,我的意思是适配器中最后过滤的数据,布局中只有一个ListView,代码中只有一个ListView,而不是多个。,当我离开屏幕并返回ListView在第二个屏幕截图中应有的显示。
-
在我看来,过滤器应该已经在适配器上调用 datasetChanged,所以您可能不必这样做。我不知道这是否可以解释您的问题,但值得评论并尝试一下。
-
你能解释一下为什么你有两个适配器吗?
ArrayAdapter aa1和一个字段adapter。它的类是什么? -
不幸的是,注释掉 setDataSetChanged 没有任何效果,至于 ArrayAdapter,我已经删除了,抱歉,我用它来填充弹出对话框。用户然后从弹出对话框中选择要过滤的选项,并且此字符串用于过滤器中。
标签: android listview refresh android-4.0-ice-cream-sandwich android-ui