首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于具有多个标记的视图的Android findViewWithTag

用于具有多个标记的视图的Android findViewWithTag
EN

Stack Overflow用户
提问于 2016-04-22 14:40:36
回答 4查看 2.2K关注 0票数 5

我过去使用view.setTag(t1);将标签设置为视图,然后使用正确返回的parent.findViewWithTag(t1);获取视图。

我现在需要为我的视图设置两个不同的标记,我正在使用

代码语言:javascript
运行
复制
view.setTag(R.id.tag1, t1);
view.setTag(R.id.tag2, t2);

其中tag1和tag2是res/value/ids.xml中声明的ids。

然后,我尝试使用标记t1获取视图,但是parent.findViewWithTag(t1);返回null。我搜索了,并且没有任何方法findViewWithTag或类似的方法也会接受标记的键。

有办法做到这一点吗?如果没有,你能帮我指出android文档中的内容吗?

在这种特殊情况下,我可以使用id而不是其中的一个标记,但是对于不可能使用的情况,我想知道是否可以使用标记来实现。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-22 14:53:54

findViewWithTag(tag)返回带有setTag(tag)设置的默认标记的视图,与使用tag.equals(getTag())进行比较。

票数 4
EN

Stack Overflow用户

发布于 2016-04-22 14:59:39

作为对Diegos答案的补充,我想在源代码中指出:

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/view/View.java#18288

代码语言:javascript
运行
复制
if (tag != null && tag.equals(mTag)) {

用于比较和查找视图的标记是mTag,它是通过使用直接方法setTag(Object)设置的,如这行的源代码中所示:

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/view/View.java#18505

代码语言:javascript
运行
复制
public void setTag(final Object tag) {
    mTag = tag;
}
票数 2
EN

Stack Overflow用户

发布于 2016-04-22 15:27:21

方法View.getTag()View.findViewWithTag()只将View.setTag()分配的Object返回给特定的View,也请参阅文档

但是,您可以编写自己的findViewWithTag()方法:

代码语言:javascript
运行
复制
public View findViewWithTag(@NonNull ViewGroup parent, int tagID, @NonNull Object myTag) 
{
    for (int i = 0; i < parent.getChildCount(); i++)
    {
        View v = parent.getChildAt(i);
        if ( myTag.equals(v.getTag(tagID)) )
        {
            return v;
        }
    }
    return null;
}

还可以将搜索范围缩小到View的特定子类,方法是在if子句中添加一些条件,如(v instanceof MySpecificView)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36796782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档