我过去使用view.setTag(t1);
将标签设置为视图,然后使用正确返回的parent.findViewWithTag(t1);
获取视图。
我现在需要为我的视图设置两个不同的标记,我正在使用
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
而不是其中的一个标记,但是对于不可能使用的情况,我想知道是否可以使用标记来实现。
发布于 2016-04-22 14:53:54
findViewWithTag(tag)
返回带有setTag(tag)
设置的默认标记的视图,与使用tag.equals(getTag())
进行比较。
发布于 2016-04-22 14:59:39
作为对Diegos答案的补充,我想在源代码中指出:
if (tag != null && tag.equals(mTag)) {
用于比较和查找视图的标记是mTag
,它是通过使用直接方法setTag(Object)
设置的,如这行的源代码中所示:
public void setTag(final Object tag) {
mTag = tag;
}
发布于 2016-04-22 15:27:21
方法View.getTag()
或View.findViewWithTag()
只将View.setTag()
分配的Object
返回给特定的View
,也请参阅文档。
但是,您可以编写自己的findViewWithTag()
方法:
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)
。
https://stackoverflow.com/questions/36796782
复制相似问题