Android:是否可以在具有过滤功能的适配器上构建GridView?

时间:2011-03-15 15:29:03

标签: android gridview filter adapter

背景
我有一个基于相当复杂的适配器类的 GridView ,它扩展了 BaseAdapter 。我发现我在 getView 中做了太多工作来计算要显示的内容,而且我想要显示的项目数通常会在这些计算中发生变化。 getView 甚至会针对同一位置多次调用。似乎 notifyDataSetChanged()过早被调用。

这给我的编码造成了很大的痛苦。我将大部分代码移到了其他例程中,但发现我仍然需要在最终显示期间对选择进行一些过滤。

我通过设置 item.enabled(false)来解决这个问题,但是我总是将这个项目全部消除。

我无法找到 GridView &的生命周期。底层适配器,但我已经确定 getCount()在项目显示之前被多次调用,而我可以在那里挂钩我的更改,感觉就像我必须努力工作这里。

问题:
我可以使用与 GridView 绑定的适配器连接的过滤器类吗?

例如,我的 GridView 适配器有36个要显示的项目,包含它的Activity的 TextView 设置为值“3”,这意味着只显示每3个项目。 adapter.notifyDataSetChanged()被调用,并立即 .getCount()想要返回36,这真的与 getView

混淆

我知道这里没有很多细节,因为我需要理解这些概念,而不只是找到特定问题的解决方案。

必须有一些功能或方法来查看我忽略的问题。

1 个答案:

答案 0 :(得分:2)

你是否覆盖了getCount?为什么在基础数据发生变化后会返回36?

如果你让getCount取决于基础数据,我认为你不会遇到这个问题:

@Override
public int getCount() {
    return myArray.length; // or whatever your underlying data source is
}

修改 - 另外,请确保在调用notifyDataSetChanged之前更改数据集