如何获取Filter.filter()的Filter.Filterlistener的结果?
How to obtain results in Filter.Filterlistener of Filter.filter()?
在 Android 应用程序中,我有一个通用设置 -- 一个带有 ArrayAdapter 的 ListView。在某一时刻,我调用了适配器的 getFilter().filter() 方法,它很好地限制了屏幕上显示的 ListView 项目的集合。但我真正想做的是以编程方式获取这些显示项目的列表。 Filter 对象本身似乎 "know" 此信息,但我无法获取该信息,因为 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 count) 方法)的项目数量的计数,他们本可以让这些物品自己可用...不知何故,在某个地方?
过滤 ArrayAdapter
时...问题是获取未显示的项目。显示的项目是您可以访问的全部内容。因此,一旦你进行了过滤,你就可以简单地遍历适配器来获取每一项。伪代码示例:
List<Foo> data = new ArrayList<Foo>();
int count = mAdapter.getCount();
for (int index = 0; index < count; ++index) {
data.add(mAdapter.getItem(index));
}
这是获取已放入适配器的项目列表的通用方法。如果过滤操作从未发生过,它将 return 为您提供适配器中的所有项目。如果发生过滤,它只会 return 您显示的数据。使用过滤和 ArrayAdapter
时有一些奇怪的地方。我建议阅读 this,以获取有关它的错误和陷阱的更多信息。
在 Android 应用程序中,我有一个通用设置 -- 一个带有 ArrayAdapter 的 ListView。在某一时刻,我调用了适配器的 getFilter().filter() 方法,它很好地限制了屏幕上显示的 ListView 项目的集合。但我真正想做的是以编程方式获取这些显示项目的列表。 Filter 对象本身似乎 "know" 此信息,但我无法获取该信息,因为 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 count) 方法)的项目数量的计数,他们本可以让这些物品自己可用...不知何故,在某个地方?
过滤 ArrayAdapter
时...问题是获取未显示的项目。显示的项目是您可以访问的全部内容。因此,一旦你进行了过滤,你就可以简单地遍历适配器来获取每一项。伪代码示例:
List<Foo> data = new ArrayList<Foo>();
int count = mAdapter.getCount();
for (int index = 0; index < count; ++index) {
data.add(mAdapter.getItem(index));
}
这是获取已放入适配器的项目列表的通用方法。如果过滤操作从未发生过,它将 return 为您提供适配器中的所有项目。如果发生过滤,它只会 return 您显示的数据。使用过滤和 ArrayAdapter
时有一些奇怪的地方。我建议阅读 this,以获取有关它的错误和陷阱的更多信息。