Android:是不是可以将 GridView 建立在具有过滤功能的适配器上?
Posted
技术标签:
【中文标题】Android:是不是可以将 GridView 建立在具有过滤功能的适配器上?【英文标题】:Android: Is it possible to base a GridView on an adapter with filter capabaility?Android:是否可以将 GridView 建立在具有过滤功能的适配器上? 【发布时间】:2011-03-15 15:29:03 【问题描述】:背景: 我有一个基于相当复杂的 Adapter 类的 GridView,它扩展了 BaseAdapter。我发现我在 getView 中做了太多的工作来计算要显示的内容,而且在这些计算过程中我想要显示的项目数量通常会发生变化。 getView 甚至会为同一个位置多次调用。似乎 notifyDataSetChanged() 被调用得太早了。
这给我的编码带来了很大的痛苦。我将大部分代码移到其他例程中,但发现我仍然需要在最终显示期间对选择进行一些过滤。
我已经通过设置 item.enabled(false) 来解决这个问题,它可以工作,但我宁愿将这个项目全部删除。
我找不到 GridView 和底层适配器的生命周期,但我确定 getCount() 在项目显示之前被调用了多次虽然我可以将我的更改挂在那里,但感觉就像我不得不在这里工作太努力了。
问题: 我可以将 Filter 类与绑定到 GridView 的 Adapter 连接使用吗?
例如,我的 GridView 适配器有 36 个要显示的项目,包含它的 Activity 的 TextView 设置为值“3”,这意味着只显示每第 3 项。 adapter.notifyDataSetChanged() 被调用并立即 .getCount() 想要返回 36,这真的与 getView
我知道这里没有很多细节,因为我需要理解概念,而不仅仅是为特定问题找到解决方案。
必须有一些功能或方法来查看我忽略的问题。
【问题讨论】:
【参考方案1】:你是否覆盖了getCount
?为什么底层数据发生变化后会返回36?
如果你让getCount
依赖于基础数据,我认为你不会有这个问题:
@Override
public int getCount()
return myArray.length; // or whatever your underlying data source is
编辑 - 另外,请确保在调用notifyDataSetChanged
之前对数据集进行更改。
【讨论】:
以上是关于Android:是不是可以将 GridView 建立在具有过滤功能的适配器上?的主要内容,如果未能解决你的问题,请参考以下文章
Android:MainActivity/Fragment 中的 ListView / GridView 重叠工具栏