背景
我有一个基于相当复杂的适配器类的 GridView ,它扩展了 BaseAdapter 。我发现我在 getView 中做了太多工作来计算要显示的内容,而且我想要显示的项目数通常会在这些计算中发生变化。 getView 甚至会针对同一位置多次调用。似乎 notifyDataSetChanged()过早被调用。
这给我的编码造成了很大的痛苦。我将大部分代码移到了其他例程中,但发现我仍然需要在最终显示期间对选择进行一些过滤。
我通过设置 item.enabled(false)来解决这个问题,但是我总是将这个项目全部消除。
我无法找到 GridView &的生命周期。底层适配器,但我已经确定 getCount()在项目显示之前被多次调用,而我可以在那里挂钩我的更改,感觉就像我必须努力工作这里。
问题:
我可以使用与 GridView 绑定的适配器连接的过滤器类吗?
例如,我的 GridView 适配器有36个要显示的项目,包含它的Activity的 TextView 设置为值“3”,这意味着只显示每3个项目。 adapter.notifyDataSetChanged()被调用,并立即 .getCount()想要返回36,这真的与 getView
混淆我知道这里没有很多细节,因为我需要理解这些概念,而不只是找到特定问题的解决方案。
必须有一些功能或方法来查看我忽略的问题。
答案 0 :(得分:2)
你是否覆盖了getCount
?为什么在基础数据发生变化后会返回36?
如果你让getCount
取决于基础数据,我认为你不会遇到这个问题:
@Override
public int getCount() {
return myArray.length; // or whatever your underlying data source is
}
修改 - 另外,请确保在调用notifyDataSetChanged
之前更改数据集。