【问题标题】:How to find element inside a gridview in Android?如何在 Android 的 gridview 中查找元素?
【发布时间】:2011-05-12 10:18:50
【问题描述】:

我有一个使用自定义适配器填充的网格视图。 在填充 gridview 时,我给每个元素一个唯一的标签。

一旦这个 gridview 被填充,我希望在 gridview 中找到一个带有它的标签的特定元素。我如何找到这个?

目前我正在这样做:

gridviewobject.findViewById(thetag);
// gridview object is the object of the gridview that i have populated.

【问题讨论】:

  • 如果对象不在屏幕上,那么它的视图可能不存在 - 在这种情况下,您无法获得对它的引用。您可以使用getChildAt 结合getFirstVisiblePositiongetChildCount 来确定当前可见的视图以及每个视图对应的位置。
  • 您能否更详细地解释您的建议。

标签: android android-gridview


【解决方案1】:

您在上面写的内容将起作用,除了要注意 a) 通过其标签搜索视图可能是您可以用来查找视图的最慢方法 b) 如果您尝试使用标签请求视图并且视图当前不可见,那么您将获得null

这是因为GridView 回收了它的视图,所以基本上它只会产生足够的视图以适应屏幕,然后在你滚动时改变它们的位置和内容。

可能是更好的方法

final int numVisibleChildren = gridView.getChildCount();
final int firstVisiblePosition = gridView.getFirstVisiblePosition();

for ( int i = 0; i < numVisibleChildren; i++ ) {
    int positionOfView = firstVisiblePosition + i;

    if (positionOfView == positionIamLookingFor) {
        View view = gridView.getChildAt(i);
    }
}

基本上findViewWithTag 做了类似的事情,但它不是比较整数而是比较标签(这比较慢,因为它们是对象而不是整数)

【讨论】:

  • 我想要一个标签,因为我不知道我试图在 gridview 中找到的视图的确切位置。同样,当视图可见时,并尝试按标签查找视图,正如我在问题中所示,我仍然得到一个空值。
  • 如果 GridView 中的每个唯一位置都有一个唯一标签,那么如果您知道要查找的标签,您也应该能够计算出您要查找的位置。
  • 非常感谢,我正在查看的代码直接访问 childAt(pos).. 导致布局为空,您的代码完美运行...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2016-01-21
  • 2018-11-19
  • 1970-01-01
相关资源
最近更新 更多