首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Filter.Filterlistener of Filter.filter()中获得结果?

如何在Filter.Filterlistener of Filter.filter()中获得结果?
EN

Stack Overflow用户
提问于 2015-02-23 04:10:40
回答 1查看 1.1K关注 0票数 1

在Android应用程序中,我有一个常见的设置--一个带有ArrayAdapter的ArrayAdapter。在某种程度上,我调用适配器的getFilter().filter()方法,它很好地限制了显示在屏幕上的ListView项的集合。但我真正想要做的是,以编程的方式获得那些显示的项目的列表。Filter对象本身似乎“知道”该信息,但由于Filter.values()受到保护,我无法获取该信息。也就是说,我想做这样的事情:

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-24 03:08:31

ArrayAdapter是filtered...the时,问题是获取未显示的项。显示的项目是您可以访问的全部内容。因此,一旦您执行了一个过滤器,您就可以简单地遍历适配器来获得每个项。伪码示例:

代码语言:javascript
复制
List<Foo> data = new ArrayList<Foo>();
int count = mAdapter.getCount();
for (int index = 0; index < count; ++index) {
    data.add(mAdapter.getItem(index));
}

这是获取已放置到适配器中的项列表的通用方法。如果过滤器操作从未发生,它将返回适配器中的所有项。如果已进行筛选,则只返回显示的数据。在使用过滤和ArrayAdapter时有一些奇怪之处。我建议阅读,以获得更多关于它的bug和问题的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28666792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档