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 类与绑定到 GridViewAdapter 连接使用吗?

例如,我的 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 重叠工具栏

Android - 网格视图或列表视图?

带有类别的Android GridView?

Android新手入门2016(10)--GridView

GridLayout(不是GridView)如何均匀地拉伸所有孩子

Android之微信朋友圈UI实现--ExpandableListView+GridView