在Android应用程序中,我有一个常见的设置--一个带有ArrayAdapter的ArrayAdapter。在某种程度上,我调用适配器的getFilter().filter()方法,它很好地限制了显示在屏幕上的ListView项的集合。但我真正想要做的是,以编程的方式获得那些显示的项目的列表。Filter对象本身似乎“知道”该信息,但由于Filter.values()受到保护,我无法获取该信息。也就是说,我想做这样的事情:
Filter myfilter = adapter.getFilter();
myfilter.filter(text, new Filter.FilterListener() {
@Override
public void onFilterComplete(int count) {
Filter.FilterResults results = myfilter.values(); // Won't compile!
... do something with results ...
}
}除了实现我自己的ArrayAdapter子类之外,还有什么方法可以得到我想要的吗?我在想,如果Google给我们一个通过过滤器(也就是通过Filter.FilterListener.onFilterComplete(int )方法)传递的项目数的麻烦,他们会在某个地方自己做available...somehow吗?
发布于 2015-02-24 03:08:31
当ArrayAdapter是filtered...the时,问题是获取未显示的项。显示的项目是您可以访问的全部内容。因此,一旦您执行了一个过滤器,您就可以简单地遍历适配器来获得每个项。伪码示例:
List<Foo> data = new ArrayList<Foo>();
int count = mAdapter.getCount();
for (int index = 0; index < count; ++index) {
data.add(mAdapter.getItem(index));
}这是获取已放置到适配器中的项列表的通用方法。如果过滤器操作从未发生,它将返回适配器中的所有项。如果已进行筛选,则只返回显示的数据。在使用过滤和ArrayAdapter时有一些奇怪之处。我建议阅读这,以获得更多关于它的bug和问题的信息。
https://stackoverflow.com/questions/28666792
复制相似问题