我曾经使用view.setTag(t1);
将标记设置为视图,然后使用正确返回的parent.findViewWithTag(t1);
获取视图。
我现在需要为我的视图设置2个不同的标签,我正在使用
view.setTag(R.id.tag1, t1);
view.setTag(R.id.tag2, t2);
其中tag1和tag2是在res / values / ids.xml
中声明的id然后我尝试使用标记t1获取视图,但parent.findViewWithTag(t1);
返回null。我搜索过,没有方法findViewWithTag
或类似的方法也接受标签的密钥。
有没有办法实现这个目标?如果没有,你可以指出我在android文档中说明的位置吗?
在这种特定情况下,我可以使用id
而不是其中一个标签,但对于无法实现的情况,我想知道是否可以使用标签实现。
答案 0 :(得分:3)
findViewWithTag(tag)
返回使用setTag(tag)
设置的tag.equals(getTag())
设置的默认标记的视图。
答案 1 :(得分:1)
if (tag != null && tag.equals(mTag)) {
用于比较和查找视图的标记是使用直接方法mTag
设置的setTag(Object)
,如此行上的源代码所示:
public void setTag(final Object tag) {
mTag = tag;
}
答案 2 :(得分:1)
方法View.getTag()
或View.findViewWithTag()
只会将Object
分配的View.setTag()
返回到某个View
,另请参阅documentation。
但是,您可以编写自己的findViewWithTag()
方法:
public View findViewWithTag(@NonNull View 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
子句中添加(v instanceof MySpecificView)
等条件,将搜索范围缩小到if
的特定子类。