2013-01-01 51 views
11

View.getRoot()返回View,所以我们可以通过使用getResourceName(View.getId())很容易找出哪个是根视图。Android:如何获得父视图的ID?

View.getParent() ...,虽然我预计它也会返回View这是父级,实际上只返回一个实例ViewParent,似乎有很少有用的方法/字段。它很烂。

那么,有什么办法可以知道父母的ID吗?我相信View的父母也是View,因此它应该有mID字段。

我真的很想知道为什么Google不让View.getParent()只是返回View。这是有道理的,只有当View以外的其他东西可以作为父母时,并且据我所知,它仅限于View及其子类。

+0

View.getId()返回查看和View.getClass()的名称。的getName()retun查看类型的名称 –

回答

18

ViewParent只是一个接口,任何可以有孩子的View实现。大多数情况下,您返回的课程将是ViewGroup的实例,如LinearLayoutRelativeLayout。我不完全确定你的名字是什么意思,但如果你想获得类名,你可以像这样做:view.getParent().getClass().getName()

+0

谢谢,我会更新我的帖子以获得更多清晰度。 – Quv

+7

如果你想获得ID,你需要先将它转换为一个'ViewGroup'。请注意,它不是100%安全的,因为它也可以是'ViewRootImpl',尽管我怀疑你会在实践中得到这些。所以'((ViewGroup)view.getParent())。getId()' – dmon

5

docs状态父不一定是View

公共最终ViewParent的getParent()

在API级别1获取该视图的父。请注意, 父级是ViewParent,不一定是View。

返回此视图的父级。

然而,ViewParent的所有实现继承自View。这应该是一个设计决定,使用ViewParent接口将父节点与View分开,尽管SDK中的所有实现都是视图。

3

试着先铸造它。例如,如果认为你正在试图获得的ID父是的TableRow,然后做

((TableRow)View.getParent()).getID() 
相关问题