2013-01-31 49 views
9

所以后,我设置我的列表视图过滤器:机器人 - 列表视图过滤器计数

//Log adapter count before filter 
listView.getFilter().filter(searchStr) 
//Log adapter count after filter 

我试图做到的,是让该过滤的结果的计数。就像之前有10个项目,然后我应用过滤器,所以现在只有5个项目会出现,我想要得到那个数字“5”。我试过在没有运气的过滤器之前和之后检查适配器数量。如果我应用过滤器,它们显示相同的计数(我使用的是BaseExpandableListAdapter),如果再次应用过滤器,则数量会从之前的变化(但前后的过滤器仍然相同)。

下面是什么,我让我的日志的样本结果:

Before filter the count is 10. After filter the count is 10. 
Before filter the count is 8. After filter the count is 8. 

我想,也许我的适配器没有得到体现计数马上,但是,从第二过滤器,它的变化值,所以我认为过滤器会有所作为后notifyDataSetChanged,但它没有。任何帮助,将不胜感激。

谢谢。

回答

19

这是我成功地做到这一点:

myAdapter.getFilter().filter(searchText, new Filter.FilterListener() { 
    public void onFilterComplete(int count) { 
     Log.d("log", "result count:" + count); 
    } 
}); 
+0

这实际上解决了我最初的问题,再加上另一个问题:由于事实上过滤器透明地在Asynctask中运行,并且在实际发生publishResults之前调用了setAdapter,所以我的列表出现在所有元素的几分之一秒内 – leRobot

+1

缺失) ; \t在你的代码,,,它打开附近的过滤器(但没有关闭bracket.so添加);结束 – sasikumar

-1

尝试在应用过滤器后调用listview.getCount()

+0

我使用ExpandableListView。并且使用它返回组计数而不是每个组的子计数。 – lorraine