9

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

填充此网格视图后,我希望在网格视图中找到带有其标记的特定元素。我怎么找到这个?

目前我正在这样做:

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

1 回答 1

15

您在上面写的内容将起作用,除了要注意 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上做了类似的事情,但不是比较整数,而是比较标签(因为它们是对象而不是整数,所以比较慢)

于 2011-05-12T11:07:26.247 回答