1

I'm working with the newest Android SDK and I want to filter my ListView which represents a list of different plants, with CheckBoxes.

In my list I have 800 Items with different attributes (e.g. color, size, edibility), and the CheckBoxes should filter the list in a subtractive way. Only the list items/views which match all attributes should be visible - all other rows should be invisible(the program should work like the filtering system on www.pilzsuchmaschine.de).

I tried to modify the getView() of my custom ArrayAdapter but I didn't get the right idea how to do that properly. Does anyone have a solution?

My ArrayAdapter is pretty the same as this one.

4

1 回答 1

1

我试图修改我的自定义 ArrayAdapter 的 getView() 但我没有正确的想法如何正确地做到这一点。有没有人有办法解决吗?

您没有在getView()方法中进行过滤。首先OnCheckedChangeListener在所有过滤器上设置 aCheckBoxes以监视它们的状态(每个过滤器都CheckBoxes应该有一个boolean变量来保存其状态)。当过滤器CheckBox被选中/取消选中时,更新状态变量,然后过滤ListView. 过滤ListView可以通过两种方式完成,手动或使用专用机制(Filter类)。

手动,当用户检查时,CheckBox您将获取过滤器的所有状态CheckBoxes并将它们与植物列表的每个元素进行匹配。与所有状态匹配的元素CheckBoxes是有效的,应该添加到新列表中。完成后,让适配器指向新创建的列表并调用notifyDataSetChanged(). 我不会采用这种方法,因为您有很多项目。

正确的方法是制作您自己的适配器及其Filter方法(在这种情况下,适配器将保存过滤器的状态CheckBoxes)。当用户检查过滤器时,CheckBox调用适配器上的方法来更新相应的布尔状态。还要调用getFilter()适配器上的方法并进行过滤:((Filterable) adapter).getFilter().filter(null). 那里有很多关于实现Filter适配器的教程。

于 2013-02-07T09:12:57.183 回答